mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Zekun Shen <bruceshenzk@gmail.com>,
	Brendan Dolan-Gavitt <brendandg@nyu.edu>,
	Igor Russkikh <irusskikh@marvell.com>,
	"David S . Miller" <davem@davemloft.net>,
	Sasha Levin <sashal@kernel.org>,
	kuba@kernel.org, netdev@vger.kernel.org
Subject: [PATCH AUTOSEL 5.10 14/43] atlantic: fix double-free in aq_ring_tx_clean
Date: Tue, 30 Nov 2021 09:49:51 -0500	[thread overview]
Message-ID: <20211130145022.945517-14-sashal@kernel.org> (raw)
In-Reply-To: <20211130145022.945517-1-sashal@kernel.org>

From: Zekun Shen <bruceshenzk@gmail.com>

[ Upstream commit 6a405f6c372d14707b87d3097b361b69899a26c8 ]

We found this bug while fuzzing the device driver. Using and freeing
the dangling pointer buff->skb would cause use-after-free and
double-free.

This bug is triggerable with compromised/malfunctioning devices. We
found the bug with QEMU emulation and tested the patch by emulation.
We did NOT test on a real device.

Attached is the bug report.

BUG: KASAN: double-free or invalid-free in consume_skb+0x6c/0x1c0

Call Trace:
 dump_stack+0x76/0xa0
 print_address_description.constprop.0+0x16/0x200
 ? consume_skb+0x6c/0x1c0
 kasan_report_invalid_free+0x61/0xa0
 ? consume_skb+0x6c/0x1c0
 __kasan_slab_free+0x15e/0x170
 ? consume_skb+0x6c/0x1c0
 kfree+0x8c/0x230
 consume_skb+0x6c/0x1c0
 aq_ring_tx_clean+0x5c2/0xa80 [atlantic]
 aq_vec_poll+0x309/0x5d0 [atlantic]
 ? _sub_I_65535_1+0x20/0x20 [atlantic]
 ? __next_timer_interrupt+0xba/0xf0
 net_rx_action+0x363/0xbd0
 ? call_timer_fn+0x240/0x240
 ? __switch_to_asm+0x34/0x70
 ? napi_busy_loop+0x520/0x520
 ? net_tx_action+0x379/0x720
 __do_softirq+0x18c/0x634
 ? takeover_tasklets+0x5f0/0x5f0
 run_ksoftirqd+0x15/0x20
 smpboot_thread_fn+0x2f1/0x6b0
 ? smpboot_unregister_percpu_thread+0x160/0x160
 ? __kthread_parkme+0x80/0x100
 ? smpboot_unregister_percpu_thread+0x160/0x160
 kthread+0x2b5/0x3b0
 ? kthread_create_on_node+0xd0/0xd0
 ret_from_fork+0x22/0x40

Reported-by: Brendan Dolan-Gavitt <brendandg@nyu.edu>
Signed-off-by: Zekun Shen <bruceshenzk@gmail.com>
Reviewed-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
index 24122ccda614c..81b3756417ec2 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
@@ -298,13 +298,14 @@ bool aq_ring_tx_clean(struct aq_ring_s *self)
 			}
 		}
 
-		if (unlikely(buff->is_eop)) {
+		if (unlikely(buff->is_eop && buff->skb)) {
 			u64_stats_update_begin(&self->stats.tx.syncp);
 			++self->stats.tx.packets;
 			self->stats.tx.bytes += buff->skb->len;
 			u64_stats_update_end(&self->stats.tx.syncp);
 
 			dev_kfree_skb_any(buff->skb);
+			buff->skb = NULL;
 		}
 		buff->pa = 0U;
 		buff->eop_index = 0xffffU;
-- 
2.33.0


  parent reply	other threads:[~2021-11-30 15:13 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-30 14:49 [PATCH AUTOSEL 5.10 01/43] ASoC: mediatek: mt8173-rt5650: Rename Speaker control to Ext Spk Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 02/43] ASoC: Intel: sof_sdw: Add support for SKU 0AF3 product Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 03/43] ASoC: Intel: sof_sdw: Add support for SKU 0B00 and 0B01 products Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 04/43] ASoC: Intel: sof_sdw: Add support for SKU 0B11 product Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 05/43] ASoC: Intel: sof_sdw: Add support for SKU 0B13 product Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 06/43] ASoC: Intel: sof_sdw: Add support for SKU 0B29 product Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 07/43] ASoC: Intel: sof_sdw: Add support for SKU 0B12 product Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 08/43] ASoC: mediatek: mt8173: Fix debugfs registration for components Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 09/43] ASoC: qdsp6: q6adm: improve error reporting Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 10/43] ASoC: qdsp6: q6routing: validate port id before setting up route Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 11/43] xen/privcmd: make option visible in Kconfig Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 12/43] NFSv4.1: handle NFS4ERR_NOSPC by CREATE_SESSION Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 13/43] scsi: scsi_debug: Fix type in min_t to avoid stack OOB Sasha Levin
2021-11-30 14:49 ` Sasha Levin [this message]
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 15/43] stmmac_pci: Fix underflow size in stmmac_rx Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 16/43] HID: multitouch: Fix Iiyama ProLite T1931SAW (0eef:0001 again!) Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 17/43] parisc: Provide an extru_safe() macro to extract unsigned bits Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 18/43] parisc: Fix extraction of hash lock bits in syscall.S Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 19/43] parisc: Convert PTE lookup to use extru_safe() macro Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 20/43] selftests/tc-testings: Be compatible with newer tc output Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 21/43] scsi: scsi_debug: Sanity check block descriptor length in resp_mode_select() Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 22/43] locking/rwsem: Optimize down_read_trylock() under highly contended case Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 23/43] i2c: i801: Fix interrupt storm from SMB_ALERT signal Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 24/43] mmc: spi: Add device-tree SPI IDs Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 25/43] net: chelsio: cxgb4vf: Fix an error code in cxgb4vf_pci_probe() Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 26/43] smb2: clarify rc initialization in smb2_reconnect Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 27/43] nvmet-tcp: fix a race condition between release_queue and io_work Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 28/43] nvmet-tcp: add an helper to free the cmd buffers Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 29/43] nvmet-tcp: fix memory leak when performing a controller reset Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 30/43] nvme-tcp: validate R2T PDU in nvme_tcp_handle_r2t() Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 31/43] nvme-tcp: fix memory leak when freeing a queue Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 32/43] nvme-pci: add NO APST quirk for Kioxia device Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 33/43] nvme: fix write zeroes pi Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 34/43] xen: add "not_essential" flag to struct xenbus_driver Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 35/43] xen: flag xen_drm_front to be not essential for system boot Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 36/43] xen: flag hvc_xen " Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 37/43] xen: flag pvcalls-front " Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 38/43] xen: flag xen_snd_front " Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 39/43] PM: hibernate: Fix snapshot partial write lengths Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 40/43] vhost-vdpa: clean irqs before reseting vdpa device Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 41/43] net: qed: fix the array may be out of bound Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 42/43] net: ptp: add a definition for the UDP port for IEEE 1588 general messages Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 43/43] fs: ntfs: Limit NTFS_RW to page sizes smaller than 64k Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211130145022.945517-14-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=brendandg@nyu.edu \
    --cc=bruceshenzk@gmail.com \
    --cc=davem@davemloft.net \
    --cc=irusskikh@marvell.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®