{"id":21280,"date":"2026-09-12T04:30:58","date_gmt":"2026-09-11T20:30:58","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80947"},"modified":"2026-09-12T04:30:58","modified_gmt":"2026-09-11T20:30:58","slug":"cve-2026-80947","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80947","title":{"rendered":"CVE-2026-80947 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nwifi: rtl8xxxu: fix u"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>wifi: rtl8xxxu: fix use-after-free from rx_urb_wq on stop<\/p>\n<p>rtl8xxxu arms rx_urb_wq from the RX completion path:<br \/>\nrtl8xxxu_rx_complete() hands the URB to rtl8xxxu_queue_rx_urb(), which<br \/>\nqueues it on rx_urb_pending_list and, once the list grows past<br \/>\nRTL8XXXU_RX_URB_PENDING_WATER, schedules rx_urb_wq.  The worker<br \/>\nrtl8xxxu_rx_urb_work() drains rx_urb_pending_list, recovers priv through<br \/>\ncontainer_of, and resubmits each URB through rtl8xxxu_submit_rx_urb(),<br \/>\nwhich anchors it on rx_anchor and dereferences priv-&gt;udev.<\/p>\n<p>rtl8xxxu_stop() cancels the sibling work items (c2hcmd_work, ra_watchdog,<br \/>\nupdate_beacon_work) but never cancels rx_urb_wq, so a worker armed during<br \/>\nthe last burst of RX traffic can run rtl8xxxu_rx_urb_work() after<br \/>\nrtl8xxxu_disconnect() has called ieee80211_free_hw(), which frees priv,<br \/>\nproducing a use-after-free.  The window opens under active RX traffic<br \/>\n(pending count above the watermark) followed by a disconnect.<\/p>\n<p>There are two teardown races to close:<\/p>\n<p>  * rtl8xxxu_queue_rx_urb() decided whether to enqueue under rx_urb_lock<br \/>\n    but called schedule_work() after dropping the lock.  A completion<br \/>\n    that observed shutdown == false and released the lock could then call<br \/>\n    schedule_work() after rtl8xxxu_stop() had set shutdown and<br \/>\n    cancel_work_sync() had already returned, arming the worker to run<br \/>\n    after the teardown.  Move schedule_work() under the same !shutdown<br \/>\n    branch so the arming decision is atomic with the shutdown check.<\/p>\n<p>  * rtl8xxxu_rx_urb_work() anchors every URB it drained back onto<br \/>\n    rx_anchor through rtl8xxxu_submit_rx_urb().  A worker still running<br \/>\n    when usb_kill_anchored_urbs(&amp;priv-&gt;rx_anchor) returned would submit a<br \/>\n    URB that escaped the kill.  In rtl8xxxu_stop(), call<br \/>\n    cancel_work_sync(&amp;priv-&gt;rx_urb_wq) before the kill so the worker is<br \/>\n    drained first.<\/p>\n<p>After priv-&gt;shutdown is set under rx_urb_lock, completions can no longer<br \/>\nqueue rx_urb_wq. cancel_work_sync() then drains the last queued or running<br \/>\nworker, and the following usb_kill_anchored_urbs() kills the URBs it may<br \/>\nhave submitted.<\/p>\n<p>rtl8xxxu_disconnect() is covered because ieee80211_unregister_hw()<br \/>\nguarantees .stop() runs for a live interface before ieee80211_free_hw()<br \/>\nfrees priv.  The probe error path needs no cancel: rx_urb_wq is<br \/>\nINIT_WORK()&#8217;d there but cannot have been scheduled, since no URB is<br \/>\nsubmitted before ieee80211_register_hw() succeeds.<\/p>\n<p>This bug was found by static analysis.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>wifi: rtl8xxxu: fix use-after-free from rx_urb_wq on stop<\/p>\n<p>rtl8xxxu arms rx_urb_wq from the RX completion path:<br \/>\nrtl8xxxu_rx_complet<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21280","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21280","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=21280"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21280"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}