{"id":4873,"date":"2026-09-04T18:46:50","date_gmt":"2026-09-04T10:46:50","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-64583"},"modified":"2026-09-04T18:46:50","modified_gmt":"2026-09-04T10:46:50","slug":"cve-2026-64583","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-64583","title":{"rendered":"CVE-2026-64583 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nusb: gadget: udc: bdc"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>usb: gadget: udc: bdc: free IRQ and drain func_wake_notify before teardown<\/p>\n<p>The Broadcom BDC UDC driver registers its IRQ handler with<br \/>\ndevm_request_irq() in bdc_udc_init(), so the IRQ is released by devm<br \/>\nonly after bdc_remove() returns.  devm releases resources in reverse<br \/>\nLIFO order, but bdc_remove() runs bdc_udc_exit() and bdc_hw_exit() -&gt;<br \/>\nbdc_mem_free() manually before returning: bdc_udc_exit() tears down<br \/>\nindividual endpoint objects via bdc_free_ep(), while bdc_hw_exit() -&gt;<br \/>\nbdc_mem_free() frees and NULLs the DMA-coherent status-report ring<br \/>\n(bdc-&gt;srr.sr_bds) and kfree()s bdc-&gt;bdc_ep_array.  Both happen while<br \/>\nthe IRQ handler (bdc_udc_interrupt, requested with IRQF_SHARED)<br \/>\nremains deliverable in the window up to the post-remove devm<br \/>\nfree_irq().<\/p>\n<p>On receipt of a shared interrupt in that window, bdc_udc_interrupt()<br \/>\ndereferences bdc-&gt;srr.sr_bds[bdc-&gt;srr.dqp_index] (NULL or freed DMA)<br \/>\nand dispatches sr_handler callbacks that index into bdc_ep_array,<br \/>\ncausing a NULL-deref or use-after-free.<\/p>\n<p>The same window affects the delayed_work bdc-&gt;func_wake_notify, which is<br \/>\narmed from the IRQ handler via bdc_sr_uspc() -&gt; handle_link_state_change()<br \/>\n-&gt; schedule_delayed_work() and may self-rearm from its own callback<br \/>\nbdc_func_wake_timer().  No cancel exists anywhere in the driver, so a<br \/>\nqueued work item that fires after bdc_remove() returns and the bdc<br \/>\nstructure is devm-freed dereferences freed memory.<\/p>\n<p>Replace devm_request_irq() with request_irq() and add an explicit<br \/>\nfree_irq(bdc-&gt;irq, bdc) in bdc_remove().  Clear BDC_GIE before<br \/>\nfree_irq() to stop the device from asserting interrupts, then<br \/>\nfree_irq() drains any in-flight handler, then cancel_delayed_work_sync()<br \/>\ndrains the func_wake_notify delayed work.  This ordering ensures the<br \/>\nIRQ handler and delayed work cannot interfere with the subsequent<br \/>\nendpoint and DMA teardown in bdc_udc_exit() and bdc_hw_exit().  Wire the<br \/>\nmatching free_irq() into the bdc_udc_init() error path so the IRQ is<br \/>\nreleased on probe failure, and route the bdc_init_ep() failure through<br \/>\nerr0 instead of returning directly.<\/p>\n<p>This issue was found by an in-house static analysis tool.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>usb: gadget: udc: bdc: free IRQ and drain func_wake_notify before teardown<\/p>\n<p>The Broadcom BDC UDC driver registers its IRQ handler w<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-4873","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/4873","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=4873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}