← All Advisories
Reported from OT-Advisories.com as of

CVE-2026-74488

Last refreshed2026-10-17

Status: UPDATED  |  Advisory ID: CVE-2026-74488

Key Details

CVECVE-2026-74488
CVSS Score / Version
8.8 (High) / CVSS v3.1
Updated2026-10-16
CVSS Vector
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS Prose
attack vector is adjacent; attack complexity is low; privileges required is none; user interaction is none; scope is unchanged; confidentiality impact is high; integrity impact is high; availability impact is high.
Affected products
Linux Kernel

Affected Products, Subsystems & Sectors

VendorProductAffected VersionsPatch Status
LinuxLinux Kernel
SubsystemsOT Supporting Infrastructure
SectorsAll Sectors

What to Know

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

wifi: mwifiex: use the subframe length when parsing A-MSDU TDLS frames

mwifiex_11n_dispatch_amsdu_pkt() splits an A-MSDU with

ieee80211_amsdu_to_8023s() and walks the resulting subframes. For each

subframe it passes the subframe data pointer to

mwifiex_process_tdls_action_frame(), but pairs it with skb->len, the

length of the A-MSDU parent, instead of rx_skb->len:

rx_skb = __skb_dequeue(&list);

rx_hdr = (struct rx_packet_hdr *)rx_skb->data;

if (ISSUPP_TDLS_ENABLED(priv->adapter->fw_cap_info) &&

ntohs(rx_hdr->eth803_hdr.h_proto) == ETH_P_TDLS) {

mwifiex_process_tdls_action_frame(priv, (u8 *)rx_hdr,

skb->len);

}

The parent is not a valid description of that buffer, and may not be

valid memory at all. ieee80211_amsdu_to_8023s() ends with

if (!reuse_skb)

dev_kfree_skb(skb);

and it only sets reuse_skb when the parent is linear, is not a

head_frag, and is being consumed as the *last* subframe. So when the

parent does not qualify for reuse it has already been freed, and the

read of skb->len is a use-after-free. When it is reused, skb->len is

the length of the last subframe, applied to every earlier subframe,

which over-states the buffer whenever an earlier subframe is shorter.

The callee cannot absorb a wrong length, because it derives its own

ceiling from the value it is given. Each frame type computes

ies_len = len - sizeof(struct ethhdr) - TDLS_*_FIX_LEN;

and the element walk is then bounded entirely against that ceiling,

for (end = pos + ies_len; pos + 1 < end; pos += 2 + pos[1]) {

u8 ie_len = pos[1];

if (pos + 2 + ie_len > end)

break;

so a too-large len moves end past the end of the subframe and the walk

reads and copies beyond it. The A-MSDU layout is chosen by the sender,

which makes the difference between the last subframe and a shorter

earlier one remotely selectable. Reaching this requires TDLS support in

firmware and the TDLS ethertype on the subframe.

The other caller, mwifiex_process_rx_packet(), is correct: it passes a

pointer and a length that describe the same region of the RX buffer.

Pass rx_skb->len, the length of the subframe actually being parsed. (NVD)

What to Do

Monitor Linux's web page for any future patch releases.

References

SourceReference
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-74488
CVEhttps://www.cve.org/CVERecord?id=CVE-2026-74488
Report compilation © 2026 OT-Advisories.com  ·  CC BY 4.0  ·  Source materials remain the property of their respective publishers as cited.