All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Marcin Kozlowski <marcinguy@gmail.com>,
	"David S . Miller" <davem@davemloft.net>,
	Sasha Levin <sashal@kernel.org>,
	kuba@kernel.org, pabeni@redhat.com, linux-usb@vger.kernel.org,
	netdev@vger.kernel.org
Subject: [PATCH AUTOSEL 5.4 15/21] net: usb: aqc111: Fix out-of-bounds accesses in RX fixup
Date: Mon, 11 Apr 2022 20:50:34 -0400	[thread overview]
Message-ID: <20220412005042.351105-15-sashal@kernel.org> (raw)
In-Reply-To: <20220412005042.351105-1-sashal@kernel.org>

From: Marcin Kozlowski <marcinguy@gmail.com>

[ Upstream commit afb8e246527536848b9b4025b40e613edf776a9d ]

aqc111_rx_fixup() contains several out-of-bounds accesses that can be
triggered by a malicious (or defective) USB device, in particular:

 - The metadata array (desc_offset..desc_offset+2*pkt_count) can be out of bounds,
   causing OOB reads and (on big-endian systems) OOB endianness flips.
 - A packet can overlap the metadata array, causing a later OOB
   endianness flip to corrupt data used by a cloned SKB that has already
   been handed off into the network stack.
 - A packet SKB can be constructed whose tail is far beyond its end,
   causing out-of-bounds heap data to be considered part of the SKB's
   data.

Found doing variant analysis. Tested it with another driver (ax88179_178a), since
I don't have a aqc111 device to test it, but the code looks very similar.

Signed-off-by: Marcin Kozlowski <marcinguy@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/net/usb/aqc111.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c
index 7e44110746dd..68912e266826 100644
--- a/drivers/net/usb/aqc111.c
+++ b/drivers/net/usb/aqc111.c
@@ -1102,10 +1102,15 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
 	if (start_of_descs != desc_offset)
 		goto err;
 
-	/* self check desc_offset from header*/
-	if (desc_offset >= skb_len)
+	/* self check desc_offset from header and make sure that the
+	 * bounds of the metadata array are inside the SKB
+	 */
+	if (pkt_count * 2 + desc_offset >= skb_len)
 		goto err;
 
+	/* Packets must not overlap the metadata array */
+	skb_trim(skb, desc_offset);
+
 	if (pkt_count == 0)
 		goto err;
 
-- 
2.35.1


  parent reply	other threads:[~2022-04-12  1:02 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-12  0:50 [PATCH AUTOSEL 5.4 01/21] drm/amd: Add USBC connector ID Sasha Levin
2022-04-12  0:50 ` Sasha Levin
2022-04-12  0:50 ` Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 02/21] drm/amd/display: fix audio format not updated after edid updated Sasha Levin
2022-04-12  0:50   ` Sasha Levin
2022-04-12  0:50   ` Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 03/21] drm/amd/display: Update VTEM Infopacket definition Sasha Levin
2022-04-12  0:50   ` Sasha Levin
2022-04-12  0:50   ` Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 04/21] drm/amdkfd: Fix Incorrect VMIDs passed to HWS Sasha Levin
2022-04-12  0:50   ` Sasha Levin
2022-04-12  0:50   ` Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 05/21] drm/amdkfd: Check for potential null return of kmalloc_array() Sasha Levin
2022-04-12  0:50   ` Sasha Levin
2022-04-12  0:50   ` Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 06/21] Drivers: hv: vmbus: Prevent load re-ordering when reading ring buffer Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 07/21] scsi: target: tcmu: Fix possible page UAF Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 08/21] scsi: ibmvscsis: Increase INITIAL_SRP_LIMIT to 1024 Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 09/21] net: micrel: fix KS8851_MLL Kconfig Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 10/21] ata: libata-core: Disable READ LOG DMA EXT for Samsung 840 EVOs Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 11/21] gpu: ipu-v3: Fix dev_dbg frequency output Sasha Levin
2022-04-12  0:50   ` Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 12/21] regulator: wm8994: Add an off-on delay for WM8994 variant Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 13/21] arm64: alternatives: mark patch_alternative() as `noinstr` Sasha Levin
2022-04-12  0:50   ` Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 14/21] tlb: hugetlb: Add more sizes to tlb_remove_huge_tlb_entry Sasha Levin
2022-04-12  0:50 ` Sasha Levin [this message]
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 16/21] drm/amd/display: Fix allocate_mst_payload assert on resume Sasha Levin
2022-04-12  0:50   ` Sasha Levin
2022-04-12  0:50   ` Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 17/21] powerpc: Fix virt_addr_valid() for 64-bit Book3E & 32-bit Sasha Levin
2022-04-12  0:50   ` Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 18/21] scsi: mvsas: Add PCI ID of RocketRaid 2640 Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 19/21] scsi: megaraid_sas: Target with invalid LUN ID is deleted during scan Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 20/21] drivers: net: slip: fix NPD bug in sl_tx_timeout() Sasha Levin
2022-04-12  0:50 ` [PATCH AUTOSEL 5.4 21/21] perf/imx_ddr: Fix undefined behavior due to shift overflowing the constant Sasha Levin
2022-04-12  0:50   ` 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=20220412005042.351105-15-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=davem@davemloft.net \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=marcinguy@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.