<?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>Tue, 29 Sep 2026 15:40:31 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-31754 — usb: cdns3: gadget: fix state inconsistency on gadget init failure</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-31754</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: cdns3: gadget: fix state inconsistency on gadget init failure&lt;/p&gt;
&lt;p&gt;When cdns3_gadget_start() fails, the DRD hardware is left in gadget mode
while software state remains INACTIVE, creating hardware/software state
inconsistency.&lt;/p&gt;
&lt;p&gt;When switching to host mode via sysfs:
  echo host &amp;gt; /sys/class/usb_role/13180000.usb-role-switch/role&lt;/p&gt;
&lt;p&gt;The role state is not set to CDNS_ROLE_STATE_ACTIVE due to the error,
so cdns_role_stop() skips cleanup because state is still INACTIVE.
This violates the DRD controller design specification (Figure22),
which requires returning to idle state before switching roles.&lt;/p&gt;
&lt;p&gt;This leads to a synchronous external abort in xhci_gen_setup() when
setting up the host controller:&lt;/p&gt;
&lt;p&gt;[  516.440698] configfs-gadget 13180000.usb: failed to start g1: -19
[  516.442035] cdns-usb3 13180000.usb: Failed to add gadget
[  516.443278] cdns-usb3 13180000.usb: set role 2 has failed
...
[ 1301.375722] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[ 1301.377716] Internal error: synchronous external abort: 96000010 [#1] PREEMPT SMP
[ 1301.382485] pc : xhci_gen_setup+0xa4/0x408
[ 1301.393391] backtrace:
    ...
    xhci_gen_setup+0xa4/0x408    &amp;lt;-- CRASH
    xhci_plat_setup+0x44/0x58
    usb_add_hcd+0x284/0x678
    ...
    cdns_role_set+0x9c/0xbc        &amp;lt;-- Role switch&lt;/p&gt;
&lt;p&gt;Fix by calling cdns_drd_gadget_off() in the error path to properly
clean up the DRD gadget state.&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: cdns3: gadget: fix state inconsistency on gadget init failure&lt;/p&gt;
&lt;p&gt;When cdns3_gadget_start() fails, the DRD hardware is left in gadget mode
while software state remains INACTIVE, creating hardware/software state
inconsistency.&lt;/p&gt;
&lt;p&gt;When switching to host mode via sysfs:
  echo host &amp;gt; /sys/class/usb_role/13180000.usb-role-switch/role&lt;/p&gt;
&lt;p&gt;The role state is not set to CDNS_ROLE_STATE_ACTIVE due to the error,
so cdns_role_stop() skips cleanup because state is still INACTIVE.
This violates the DRD controller design specification (Figure22),
which requires returning to idle state before switching roles.&lt;/p&gt;
&lt;p&gt;This leads to a synchronous external abort in xhci_gen_setup() when
setting up the host controller:&lt;/p&gt;
&lt;p&gt;[  516.440698] configfs-gadget 13180000.usb: failed to start g1: -19
[  516.442035] cdns-usb3 13180000.usb: Failed to add gadget
[  516.443278] cdns-usb3 13180000.usb: set role 2 has failed
...
[ 1301.375722] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[ 1301.377716] Internal error: synchronous external abort: 96000010 [#1] PREEMPT SMP
[ 1301.382485] pc : xhci_gen_setup+0xa4/0x408
[ 1301.393391] backtrace:
    ...
    xhci_gen_setup+0xa4/0x408    &amp;lt;-- CRASH
    xhci_plat_setup+0x44/0x58
    usb_add_hcd+0x284/0x678
    ...
    cdns_role_set+0x9c/0xbc        &amp;lt;-- Role switch&lt;/p&gt;
&lt;p&gt;Fix by calling cdns_drd_gadget_off() in the error path to properly
clean up the DRD gadget state.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-31754</guid>
    </item>
  </channel>
</rss>
