<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Thu, 01 Oct 2026 22:56:38 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-64583 — usb: gadget: udc: bdc: free IRQ and drain func_wake_notify before teardown</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-64583</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;usb: gadget: udc: bdc: free IRQ and drain func_wake_notify before teardown&lt;/p&gt;
&lt;p&gt;The Broadcom BDC UDC driver registers its IRQ handler with
devm_request_irq() in bdc_udc_init(), so the IRQ is released by devm
only after bdc_remove() returns.  devm releases resources in reverse
LIFO order, but bdc_remove() runs bdc_udc_exit() and bdc_hw_exit() -&amp;gt;
bdc_mem_free() manually before returning: bdc_udc_exit() tears down
individual endpoint objects via bdc_free_ep(), while bdc_hw_exit() -&amp;gt;
bdc_mem_free() frees and NULLs the DMA-coherent status-report ring
(bdc-&amp;gt;srr.sr_bds) and kfree()s bdc-&amp;gt;bdc_ep_array.  Both happen while
the IRQ handler (bdc_udc_interrupt, requested with IRQF_SHARED)
remains deliverable in the window up to the post-remove devm
free_irq().&lt;/p&gt;
&lt;p&gt;On receipt of a shared interrupt in that window, bdc_udc_interrupt()
dereferences bdc-&amp;gt;srr.sr_bds[bdc-&amp;gt;srr.dqp_index] (NULL or freed DMA)
and dispatches sr_handler callbacks that index into bdc_ep_array,
causing a NULL-deref or use-after-free.&lt;/p&gt;
&lt;p&gt;The same window affects the delayed_work bdc-&amp;gt;func_wake_notify, which is
armed from the IRQ handler via bdc_sr_uspc() -&amp;gt; handle_link_state_change()
-&amp;gt; schedule_delayed_work() and may self-rearm from its own callback
bdc_func_wake_timer().  No cancel exists anywhere in the driver, so a
queued work item that fires after bdc_remove() returns and the bdc
structure is devm-freed dereferences freed memory.&lt;/p&gt;
&lt;p&gt;Replace devm_request_irq(…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;usb: gadget: udc: bdc: free IRQ and drain func_wake_notify before teardown&lt;/p&gt;
&lt;p&gt;The Broadcom BDC UDC driver registers its IRQ handler with
devm_request_irq() in bdc_udc_init(), so the IRQ is released by devm
only after bdc_remove() returns.  devm releases resources in reverse
LIFO order, but bdc_remove() runs bdc_udc_exit() and bdc_hw_exit() -&amp;gt;
bdc_mem_free() manually before returning: bdc_udc_exit() tears down
individual endpoint objects via bdc_free_ep(), while bdc_hw_exit() -&amp;gt;
bdc_mem_free() frees and NULLs the DMA-coherent status-report ring
(bdc-&amp;gt;srr.sr_bds) and kfree()s bdc-&amp;gt;bdc_ep_array.  Both happen while
the IRQ handler (bdc_udc_interrupt, requested with IRQF_SHARED)
remains deliverable in the window up to the post-remove devm
free_irq().&lt;/p&gt;
&lt;p&gt;On receipt of a shared interrupt in that window, bdc_udc_interrupt()
dereferences bdc-&amp;gt;srr.sr_bds[bdc-&amp;gt;srr.dqp_index] (NULL or freed DMA)
and dispatches sr_handler callbacks that index into bdc_ep_array,
causing a NULL-deref or use-after-free.&lt;/p&gt;
&lt;p&gt;The same window affects the delayed_work bdc-&amp;gt;func_wake_notify, which is
armed from the IRQ handler via bdc_sr_uspc() -&amp;gt; handle_link_state_change()
-&amp;gt; schedule_delayed_work() and may self-rearm from its own callback
bdc_func_wake_timer().  No cancel exists anywhere in the driver, so a
queued work item that fires after bdc_remove() returns and the bdc
structure is devm-freed dereferences freed memory.&lt;/p&gt;
&lt;p&gt;Replace devm_request_irq(…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-64583</guid>
    </item>
  </channel>
</rss>
