public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Johannes Berg <johannes.berg@intel.com>,
	syzbot+d050d437fe47d479d210@syzkaller.appspotmail.com,
	Sasha Levin <sashal@kernel.org>,
	johannes@sipsolutions.net, davem@davemloft.net,
	edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
	linux-wireless@vger.kernel.org, netdev@vger.kernel.org
Subject: [PATCH AUTOSEL 6.6 43/52] wifi: cfg80211: check A-MSDU format more carefully
Date: Fri, 29 Mar 2024 08:29:13 -0400	[thread overview]
Message-ID: <20240329122956.3083859-43-sashal@kernel.org> (raw)
In-Reply-To: <20240329122956.3083859-1-sashal@kernel.org>

From: Johannes Berg <johannes.berg@intel.com>

[ Upstream commit 9ad7974856926129f190ffbe3beea78460b3b7cc ]

If it looks like there's another subframe in the A-MSDU
but the header isn't fully there, we can end up reading
data out of bounds, only to discard later. Make this a
bit more careful and check if the subframe header can
even be present.

Reported-by: syzbot+d050d437fe47d479d210@syzkaller.appspotmail.com
Link: https://msgid.link/20240226203405.a731e2c95e38.I82ce7d8c0cc8970ce29d0a39fdc07f1ffc425be4@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 net/wireless/util.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/net/wireless/util.c b/net/wireless/util.c
index 1783ab9d57a31..9aa7bdce20b26 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -797,15 +797,19 @@ ieee80211_amsdu_subframe_length(void *field, u8 mesh_flags, u8 hdr_type)
 
 bool ieee80211_is_valid_amsdu(struct sk_buff *skb, u8 mesh_hdr)
 {
-	int offset = 0, remaining, subframe_len, padding;
+	int offset = 0, subframe_len, padding;
 
 	for (offset = 0; offset < skb->len; offset += subframe_len + padding) {
+		int remaining = skb->len - offset;
 		struct {
 		    __be16 len;
 		    u8 mesh_flags;
 		} hdr;
 		u16 len;
 
+		if (sizeof(hdr) > remaining)
+			return false;
+
 		if (skb_copy_bits(skb, offset + 2 * ETH_ALEN, &hdr, sizeof(hdr)) < 0)
 			return false;
 
@@ -813,7 +817,6 @@ bool ieee80211_is_valid_amsdu(struct sk_buff *skb, u8 mesh_hdr)
 						      mesh_hdr);
 		subframe_len = sizeof(struct ethhdr) + len;
 		padding = (4 - subframe_len) & 0x3;
-		remaining = skb->len - offset;
 
 		if (subframe_len > remaining)
 			return false;
@@ -831,7 +834,7 @@ void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list,
 {
 	unsigned int hlen = ALIGN(extra_headroom, 4);
 	struct sk_buff *frame = NULL;
-	int offset = 0, remaining;
+	int offset = 0;
 	struct {
 		struct ethhdr eth;
 		uint8_t flags;
@@ -845,10 +848,14 @@ void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list,
 		copy_len = sizeof(hdr);
 
 	while (!last) {
+		int remaining = skb->len - offset;
 		unsigned int subframe_len;
 		int len, mesh_len = 0;
 		u8 padding;
 
+		if (copy_len > remaining)
+			goto purge;
+
 		skb_copy_bits(skb, offset, &hdr, copy_len);
 		if (iftype == NL80211_IFTYPE_MESH_POINT)
 			mesh_len = __ieee80211_get_mesh_hdrlen(hdr.flags);
@@ -858,7 +865,6 @@ void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list,
 		padding = (4 - subframe_len) & 0x3;
 
 		/* the last MSDU has no padding */
-		remaining = skb->len - offset;
 		if (subframe_len > remaining)
 			goto purge;
 		/* mitigate A-MSDU aggregation injection attacks */
-- 
2.43.0


  parent reply	other threads:[~2024-03-29 12:31 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-29 12:28 [PATCH AUTOSEL 6.6 01/52] wifi: ath9k: fix LNA selection in ath_ant_try_scan() Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 02/52] wifi: rtw89: fix null pointer access when abort scan Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 03/52] bnx2x: Fix firmware version string character counts Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 04/52] batman-adv: Return directly after a failed batadv_dat_select_candidates() in batadv_dat_forward_data() Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 05/52] batman-adv: Improve exception handling in batadv_throw_uevent() Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 06/52] net: stmmac: dwmac-starfive: Add support for JH7100 SoC Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 07/52] net: phy: phy_device: Prevent nullptr exceptions on ISR Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 08/52] wifi: rtw89: pci: enlarge RX DMA buffer to consider size of RX descriptor Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 09/52] VMCI: Fix memcpy() run-time warning in dg_dispatch_as_host() Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 10/52] wifi: iwlwifi: pcie: Add the PCI device id for new hardware Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 11/52] printk: For @suppress_panic_printk check for other CPU in panic Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 12/52] printk: Avoid non-panic CPUs writing to ringbuffer Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 13/52] panic: Flush kernel log buffer at the end Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 14/52] cpuidle: Avoid potential overflow in integer multiplication Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 15/52] ARM: dts: rockchip: fix rk3288 hdmi ports node Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 16/52] ARM: dts: rockchip: fix rk322x " Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 17/52] arm64: dts: rockchip: fix rk3328 " Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 18/52] arm64: dts: rockchip: fix rk3399 " Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 19/52] net: add netdev_lockdep_set_classes() to virtual drivers Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 20/52] pmdomain: ti: Add a null pointer check to the omap_prm_domain_init Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 21/52] pmdomain: imx8mp-blk-ctrl: imx8mp_blk: Add fdcc clock to hdmimix domain Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 22/52] arm64: dts: sc8280xp: correct DMIC2 and DMIC3 pin config node names Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 23/52] arm64: dts: sm8450: " Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 24/52] arm64: dts: sm8550: " Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 25/52] ionic: set adminq irq affinity Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 26/52] net: skbuff: add overflow debug check to pull/push helpers Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 27/52] firmware: tegra: bpmp: Return directly after a failed kzalloc() in get_filename() Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 28/52] wifi: brcmfmac: Add DMI nvram filename quirk for ACEPC W5 Pro Sasha Levin
2024-03-29 12:28 ` [PATCH AUTOSEL 6.6 29/52] wifi: mt76: mt7915: add locking for accessing mapped registers Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 30/52] wifi: mt76: mt7996: disable AMSDU for non-data frames Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 31/52] wifi: mt76: mt7996: add locking for accessing mapped registers Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 32/52] ACPI: x86: Move acpi_quirk_skip_serdev_enumeration() out of CONFIG_X86_ANDROID_TABLETS Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 33/52] pstore/zone: Add a null pointer check to the psz_kmsg_read Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 34/52] tools/power x86_energy_perf_policy: Fix file leak in get_pkg_num() Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 35/52] net: pcs: xpcs: Return EINVAL in the internal methods Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 36/52] dma-direct: Leak pages on dma_set_decrypted() failure Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 37/52] wifi: ath11k: decrease MHI channel buffer length to 8KB Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 38/52] sparc: vdso: Disable UBSAN instrumentation Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 39/52] cpufreq: Don't unregister cpufreq cooling on CPU hotplug Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 40/52] overflow: Allow non-type arg to type_max() and type_min() Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 41/52] sh: Fix build with CONFIG_UBSAN=y Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 42/52] wifi: iwlwifi: Add missing MODULE_FIRMWARE() for *.pnvm Sasha Levin
2024-03-29 12:29 ` Sasha Levin [this message]
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 44/52] btrfs: preallocate temporary extent buffer for inode logging when needed Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 45/52] btrfs: handle chunk tree lookup error in btrfs_relocate_sys_chunks() Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 46/52] btrfs: export: handle invalid inode or root reference in btrfs_get_parent() Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 47/52] btrfs: send: handle path ref underflow in header iterate_inode_ref() Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 48/52] ice: use relative VSI index for VFs instead of PF VSI number Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 49/52] net/smc: reduce rtnl pressure in smc_pnet_create_pnetids_list() Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 50/52] Bluetooth: btintel: Fix null ptr deref in btintel_read_version Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 51/52] Bluetooth: btmtk: Add MODULE_FIRMWARE() for MT7922 Sasha Levin
2024-03-29 12:29 ` [PATCH AUTOSEL 6.6 52/52] Bluetooth: Add new quirk for broken read key length on ATS2851 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=20240329122956.3083859-43-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=johannes.berg@intel.com \
    --cc=johannes@sipsolutions.net \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=stable@vger.kernel.org \
    --cc=syzbot+d050d437fe47d479d210@syzkaller.appspotmail.com \
    /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