CVE-2026-97595
Received Received - Intake

Use-After-Free in Linux Kernel mac802154 Subsystem

Vulnerability report for CVE-2026-97595, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-09-25

Last updated on: 2026-09-25

Assigner: kernel.org

Description

In the Linux kernel, the following vulnerability has been resolved: mac802154: fix use-after-free of sdata via queued RX frames The RX softirq producer ieee802154_subif_frame() queues received beacon and MAC-command frames onto local->rx_beacon_list / rx_mac_cmd_list and schedules a process-context worker, storing a raw mac_pkt->sdata (and skb->dev == sdata->dev) with neither a reference nor any locking: - the lists have no lock: the softirq producer list_add_tail()s while the mac_wq worker list_del()s, so sibling interfaces on the same phy corrupt the list; - the workers dereference the interface after it may have been freed. mac802154_rx_mac_cmd_worker() touches mac_pkt->sdata directly, and mac802154_rx_beacon_worker() -> mac802154_process_beacon() dereferences skb->dev (== sdata->dev). Removing an interface frees its sdata (netdev_priv) while a queued frame still points at it, so a later worker run is a use-after-free. Reproduced under KASAN by flooding a victim interface with MAC command frames and removing it (the beacon path is the same class via skb->dev): BUG: KASAN: slab-use-after-free in mac802154_rx_mac_cmd_worker+0x463/0x630 [mac802154] Read of size 4 at addr ffff888002f9ea18 by task kworker/u8:1/31 Workqueue: phy0-mac-cmds mac802154_rx_mac_cmd_worker [mac802154] Call Trace: mac802154_rx_mac_cmd_worker+0x463/0x630 [mac802154] process_one_work+0x611/0xe80 worker_thread+0x52e/0xdc0 kthread+0x30c/0x630 ret_from_fork+0x2fd/0x3e0 Fix both lists together: - add local->rx_lock and take it around every list access: the softirq producer (plain spin_lock, softirq context) and the workers and flush (spin_lock_bh, process context); - pin the interface for the lifetime of a queued frame with netdev_hold()/netdev_put(), so the worker can safely dereference sdata / skb->dev even while the interface is being removed; - dequeue under the lock at the head and loop-drain the whole list in the workers (they previously processed one frame per run and relied on a later enqueue to drain the rest); - drop not-yet-started frames of an interface before it is unregistered, from ieee802154_if_remove() (after the RCU grace period) and from the ieee802154_remove_interfaces() loop -- the latter is the whole-phy teardown path, which does not go through ieee802154_if_remove(). An in-flight worker that already dequeued a frame keeps its own netdev reference; unregister_netdevice() then waits it out in netdev_run_todo(), which runs at rtnl_unlock() (rtnl released) and after the interface has been closed, so it does not pin rtnl. A worker blocked in an association TX only delays that one interface's unregister (the usual "waiting for %s to become free"), it does not hold rtnl. netdev_hold() is used for this reason instead of a cancel_work_sync() under rtnl, which would block on the worker's unbounded MLME TX wait via ieee802154_sync_queue(). The mac-command worker additionally skips processing for a stopped interface (ieee802154_sdata_running()), avoiding a needless association response during teardown.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-09-25
Last Modified
2026-09-25
Generated
2026-09-25
AI Q&A
2026-09-25
EPSS Evaluated
N/A
NVD
EUVD

Affected Vendors & Products

Showing 1 associated CPE
Vendor Product Version / Range
linux_kernel mac802154 *

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-UNKNOWN

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This is a use-after-free vulnerability in the Linux kernel's mac802154 subsystem. It occurs when beacon and MAC-command frames are queued for processing but the interface is freed before the frames are handled. The issue stems from missing locks on frame lists and lack of interface reference counting, allowing sibling interfaces to corrupt lists and workers to dereference freed memory.

Detection Guidance

This vulnerability is specific to the Linux kernel's mac802154 subsystem and involves a use-after-free condition in RX frame handling. Detection requires kernel-level monitoring for crashes or memory corruption events, such as KASAN reports indicating slab-use-after-free in mac802154_rx_mac_cmd_worker or mac802154_rx_beacon_worker. No standard network commands can directly detect this; instead, monitor kernel logs for crashes or enable KASAN for memory error detection.

Impact Analysis

An attacker could exploit this to crash the system or potentially execute arbitrary code with kernel privileges by flooding a vulnerable interface with specially crafted frames and removing it. This could lead to denial-of-service conditions or system compromise on affected Linux systems using mac802154.

Mitigation Strategies

Apply the kernel patch that fixes the issue by adding proper locking (rx_lock), pinning interfaces with netdev_hold()/netdev_put(), and ensuring safe dereferencing of sdata/skb->dev. Update to a patched kernel version where this vulnerability is resolved. No immediate workaround is suggested beyond patching.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-97595. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart