Description
In the Linux kernel, the following vulnerability has been resolved:

wifi: mac80211: drop oversized fragments to avoid extra_len overflow

In ieee80211_rx_h_defragment(), fragment payloads are accumulated into
entry->extra_len as subsequent fragments arrive:

entry->extra_len += rx->skb->len;

When the final fragment arrives, the head fragment is dequeued, and
pskb_expand_head() is called with entry->extra_len to ensure sufficient
tailroom for all queued fragments before copying:

if (skb_tailroom(rx->skb) < entry->extra_len) {
if (unlikely(pskb_expand_head(rx->skb, 0, entry->extra_len,
GFP_ATOMIC))) {
...
}
}
while ((skb = __skb_dequeue(&entry->skb_list))) {
skb_put_data(rx->skb, skb->data, skb->len);
dev_kfree_skb(skb);
}

In commit 69f132236827 ("mac80211: shrink struct
ieee80211_fragment_entry"), entry->extra_len was narrowed from unsigned
int to u16 in order to reduce structure memory footprint.

However, an IEEE 802.11 frame sequence can contain up to 16 fragments
(frag numbers 0..15). If a sequence of large fragments arrives (e.g. from
a malicious peer or rogue AP), the sum of fragment lengths can exceed
65535 bytes (for example, 15 fragments of 4400 bytes total 66000 bytes).
Because extra_len is a u16, this addition overflows and wraps around
modulo 65536 (e.g. 66000 wraps to 464).

Consequently, pskb_expand_head() allocates only the truncated amount of
tailroom (or is skipped entirely if the head fragment already has >= 464
bytes of tailroom). When skb_put_data() subsequently iterates through the
queued skb list, it appends the full payload into the undersized buffer,
causing skb_put() to trigger skb_over_panic() and crash the kernel in
softirq context.

A legitimate MSDU in IEEE 802.11 is at most 2304 bytes (or up to 7935/11454
bytes for A-MSDU, which is not fragmented), well below U16_MAX.

Fix this without increasing the size of struct ieee80211_fragment_entry by
checking whether adding the incoming fragment length would exceed U16_MAX.
If so, purge the queued fragments and drop the frame.

[assign a separate drop reason]
Published: 2026-10-18
Score: 6.5 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Kernel crash and denial of service via crafted fragmented Wi‑Fi frames
Action: Update kernel
AI Analysis

Impact

In the Linux kernel’s wireless stack, a fragment length accumulator, entry->extra_len, was stored as a 16‑bit unsigned integer. When a sequence of up to sixteen fragments of large size arrived, the accumulation could overflow, wrapping the value around modulo 65536. Subsequent allocation calls then reserved too little space, and the full payload was copied into an undersized buffer, triggering a kernel panic. The result is an availability loss that can be triggered by a malicious peer or rogue access point sending oversized fragmented frames.

Affected Systems

All Linux kernel builds that contain the mac80211 fragment handling code before the security fix commit (69f132236827) are affected. The vulnerability is present in any kernel using the 16‑bit extra_len field; the fix removes the overflow by validating the sum before allocation.

Risk and Exploitability

The CVSS score is 6.5, indicating a medium severity vulnerability. The EPSS score is <1%, suggesting a low probability of exploitation at the time of this analysis, and the vulnerability is not listed in CISA’s KEV catalog. Based on the description, the likely attack vector is a rogue device or compromised access point that sends crafted fragmented IEEE 802.11 frames; attackers can trigger the bug by sending a series of oversized fragments from such a device. The exploit requires only network proximity and does not need privileged access, making it feasible for attackers who can inject frames into the wireless medium.

Generated by OpenCVE AI on October 24, 2026 at 04:25 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Apply a kernel release that includes the commit that checks the fragment length before allocation
  • If an update is not immediately available, apply the patch from the commit "mac80211: shrink struct ieee80211_fragment_entry" manually to the kernel source and rebuild
  • Configure enterprise Wi‑Fi gateways or access points to reject frames with more than the allowed number of fragments or excessively long fragment payloads

Generated by OpenCVE AI on October 24, 2026 at 04:25 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Sat, 24 Oct 2026 02:45:00 +0000

Type Values Removed Values Added
Weaknesses CWE-680

Sat, 24 Oct 2026 00:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-190
References
Metrics threat_severity

None

cvssV3_1

{'score': 6.5, 'vector': 'CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H'}

threat_severity

Moderate


Sun, 18 Oct 2026 22:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-680

Sun, 18 Oct 2026 16:00:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: wifi: mac80211: drop oversized fragments to avoid extra_len overflow In ieee80211_rx_h_defragment(), fragment payloads are accumulated into entry->extra_len as subsequent fragments arrive: entry->extra_len += rx->skb->len; When the final fragment arrives, the head fragment is dequeued, and pskb_expand_head() is called with entry->extra_len to ensure sufficient tailroom for all queued fragments before copying: if (skb_tailroom(rx->skb) < entry->extra_len) { if (unlikely(pskb_expand_head(rx->skb, 0, entry->extra_len, GFP_ATOMIC))) { ... } } while ((skb = __skb_dequeue(&entry->skb_list))) { skb_put_data(rx->skb, skb->data, skb->len); dev_kfree_skb(skb); } In commit 69f132236827 ("mac80211: shrink struct ieee80211_fragment_entry"), entry->extra_len was narrowed from unsigned int to u16 in order to reduce structure memory footprint. However, an IEEE 802.11 frame sequence can contain up to 16 fragments (frag numbers 0..15). If a sequence of large fragments arrives (e.g. from a malicious peer or rogue AP), the sum of fragment lengths can exceed 65535 bytes (for example, 15 fragments of 4400 bytes total 66000 bytes). Because extra_len is a u16, this addition overflows and wraps around modulo 65536 (e.g. 66000 wraps to 464). Consequently, pskb_expand_head() allocates only the truncated amount of tailroom (or is skipped entirely if the head fragment already has >= 464 bytes of tailroom). When skb_put_data() subsequently iterates through the queued skb list, it appends the full payload into the undersized buffer, causing skb_put() to trigger skb_over_panic() and crash the kernel in softirq context. A legitimate MSDU in IEEE 802.11 is at most 2304 bytes (or up to 7935/11454 bytes for A-MSDU, which is not fragmented), well below U16_MAX. Fix this without increasing the size of struct ieee80211_fragment_entry by checking whether adding the incoming fragment length would exceed U16_MAX. If so, purge the queued fragments and drop the frame. [assign a separate drop reason]
Title wifi: mac80211: drop oversized fragments to avoid extra_len overflow
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-10-19T09:26:21.901Z

Reserved: 2026-09-25T10:25:14.372Z

Link: CVE-2026-98829

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-10-18T16:17:37.140

Modified: 2026-10-19T10:19:46.943

Link: CVE-2026-98829

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-10-18T00:00:00Z

Links: CVE-2026-98829 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-10-24T04:30:08Z

Weaknesses
  • CWE-190

    Integer Overflow or Wraparound