<?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://db.gcve.eu</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>Tue, 03 Nov 2026 19:45:07 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-98766 — usb: gadget: aspeed-vhub: cancel wake work on device removal</title>
      <link>https://db.gcve.eu/vuln/cve-2026-98766</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: aspeed-vhub: cancel wake work on device removal&lt;/p&gt;
&lt;p&gt;wake_work is armed from the gadget .wakeup callback to resume suspended
downstream ports, and it is never cancelled in ast_vhub_remove(), so a
work item queued before or during removal can run after devm has freed
vhub and its ports, a use-after-free.&lt;/p&gt;
&lt;p&gt;Cancelling the work alone is not sufficient: usb_gadget_wakeup() takes
no lock and the unbind path never clears wakeup_en, so a remote-wakeup
request in flight on another CPU can re-arm the work after the cancel
and before vhub is freed.&lt;/p&gt;
&lt;p&gt;ast_vhub_del_dev() already clears d-&amp;gt;registered under vhub-&amp;gt;lock before
unregistering the gadget. Refuse the wakeup in ast_vhub_udc_wakeup()
once d-&amp;gt;registered is clear: the check and the schedule_work() are then
atomic against the unbind, so a wakeup that passed before the flag was
cleared is drained by the cancel_work_sync() after the del_dev loop,
and one that arrives later returns without arming. Also move INIT_WORK()
to the top of ast_vhub_probe(), since the probe error path reuses
ast_vhub_remove() and would otherwise cancel a never-initialized work
item.&lt;/p&gt;
&lt;p&gt;This issue was found by an in-house static analysis tool.&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: aspeed-vhub: cancel wake work on device removal&lt;/p&gt;
&lt;p&gt;wake_work is armed from the gadget .wakeup callback to resume suspended
downstream ports, and it is never cancelled in ast_vhub_remove(), so a
work item queued before or during removal can run after devm has freed
vhub and its ports, a use-after-free.&lt;/p&gt;
&lt;p&gt;Cancelling the work alone is not sufficient: usb_gadget_wakeup() takes
no lock and the unbind path never clears wakeup_en, so a remote-wakeup
request in flight on another CPU can re-arm the work after the cancel
and before vhub is freed.&lt;/p&gt;
&lt;p&gt;ast_vhub_del_dev() already clears d-&amp;gt;registered under vhub-&amp;gt;lock before
unregistering the gadget. Refuse the wakeup in ast_vhub_udc_wakeup()
once d-&amp;gt;registered is clear: the check and the schedule_work() are then
atomic against the unbind, so a wakeup that passed before the flag was
cleared is drained by the cancel_work_sync() after the del_dev loop,
and one that arrives later returns without arming. Also move INIT_WORK()
to the top of ast_vhub_probe(), since the probe error path reuses
ast_vhub_remove() and would otherwise cancel a never-initialized work
item.&lt;/p&gt;
&lt;p&gt;This issue was found by an in-house static analysis tool.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/cve-2026-98766</guid>
    </item>
  </channel>
</rss>
