{"id":29027,"date":"2026-09-25T20:31:42","date_gmt":"2026-09-25T12:31:42","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-97595"},"modified":"2026-09-25T20:31:42","modified_gmt":"2026-09-25T12:31:42","slug":"cve-2026-97595","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-97595","title":{"rendered":"CVE-2026-97595 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nmac802154: fix use-af"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>mac802154: fix use-after-free of sdata via queued RX frames<\/p>\n<p>The RX softirq producer ieee802154_subif_frame() queues received beacon<br \/>\nand MAC-command frames onto local-&gt;rx_beacon_list \/ rx_mac_cmd_list and<br \/>\nschedules a process-context worker, storing a raw mac_pkt-&gt;sdata (and<br \/>\nskb-&gt;dev == sdata-&gt;dev) with neither a reference nor any locking:<\/p>\n<p> &#8211; the lists have no lock: the softirq producer list_add_tail()s while the<br \/>\n   mac_wq worker list_del()s, so sibling interfaces on the same phy corrupt<br \/>\n   the list;<\/p>\n<p> &#8211; the workers dereference the interface after it may have been freed.<br \/>\n   mac802154_rx_mac_cmd_worker() touches mac_pkt-&gt;sdata directly, and<br \/>\n   mac802154_rx_beacon_worker() -&gt; mac802154_process_beacon() dereferences<br \/>\n   skb-&gt;dev (== sdata-&gt;dev). Removing an interface frees its sdata<br \/>\n   (netdev_priv) while a queued frame still points at it, so a later worker<br \/>\n   run is a use-after-free.<\/p>\n<p>Reproduced under KASAN by flooding a victim interface with MAC command<br \/>\nframes and removing it (the beacon path is the same class via skb-&gt;dev):<\/p>\n<p>  BUG: KASAN: slab-use-after-free in mac802154_rx_mac_cmd_worker+0x463\/0x630 [mac802154]<br \/>\n  Read of size 4 at addr ffff888002f9ea18 by task kworker\/u8:1\/31<br \/>\n  Workqueue: phy0-mac-cmds mac802154_rx_mac_cmd_worker [mac802154]<br \/>\n  Call Trace:<br \/>\n   mac802154_rx_mac_cmd_worker+0x463\/0x630 [mac802154]<br \/>\n   process_one_work+0x611\/0xe80<br \/>\n   worker_thread+0x52e\/0xdc0<br \/>\n   kthread+0x30c\/0x630<br \/>\n   ret_from_fork+0x2fd\/0x3e0<\/p>\n<p>Fix both lists together:<\/p>\n<p> &#8211; add local-&gt;rx_lock and take it around every list access: the softirq<br \/>\n   producer (plain spin_lock, softirq context) and the workers and flush<br \/>\n   (spin_lock_bh, process context);<\/p>\n<p> &#8211; pin the interface for the lifetime of a queued frame with<br \/>\n   netdev_hold()\/netdev_put(), so the worker can safely dereference sdata \/<br \/>\n   skb-&gt;dev even while the interface is being removed;<\/p>\n<p> &#8211; dequeue under the lock at the head and loop-drain the whole list in the<br \/>\n   workers (they previously processed one frame per run and relied on a<br \/>\n   later enqueue to drain the rest);<\/p>\n<p> &#8211; drop not-yet-started frames of an interface before it is unregistered,<br \/>\n   from ieee802154_if_remove() (after the RCU grace period) and from the<br \/>\n   ieee802154_remove_interfaces() loop &#8212; the latter is the whole-phy<br \/>\n   teardown path, which does not go through ieee802154_if_remove().<\/p>\n<p>An in-flight worker that already dequeued a frame keeps its own netdev<br \/>\nreference; unregister_netdevice() then waits it out in netdev_run_todo(),<br \/>\nwhich runs at rtnl_unlock() (rtnl released) and after the interface has<br \/>\nbeen closed, so it does not pin rtnl. A worker blocked in an association<br \/>\nTX only delays that one interface&#8217;s unregister (the usual &#8220;waiting for %s<br \/>\nto become free&#8221;), it does not hold rtnl. netdev_hold() is used for this<br \/>\nreason instead of a cancel_work_sync() under rtnl, which would block on<br \/>\nthe worker&#8217;s unbounded MLME TX wait via ieee802154_sync_queue().<\/p>\n<p>The mac-command worker additionally skips processing for a stopped<br \/>\ninterface (ieee802154_sdata_running()), avoiding a needless association<br \/>\nresponse during teardown.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>mac802154: fix use-after-free of sdata via queued RX frames<\/p>\n<p>The RX softirq producer ieee802154_subif_frame() queues received beaco<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-29027","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/29027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=29027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}