CVE-2026-31754

Source
https://cve.org/CVERecord?id=CVE-2026-31754
Import Source
https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2026-31754.json
JSON Data
https://api.test.osv.dev/v1/vulns/CVE-2026-31754
Downstream
Published
2026-05-01T14:14:45.628Z
Modified
2026-05-18T05:59:54.316873538Z
Summary
usb: cdns3: gadget: fix state inconsistency on gadget init failure
Details

In the Linux kernel, the following vulnerability has been resolved:

usb: cdns3: gadget: fix state inconsistency on gadget init failure

When cdns3gadgetstart() fails, the DRD hardware is left in gadget mode while software state remains INACTIVE, creating hardware/software state inconsistency.

When switching to host mode via sysfs: echo host > /sys/class/usb_role/13180000.usb-role-switch/role

The role state is not set to CDNSROLESTATEACTIVE due to the error, so cdnsrole_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.

This leads to a synchronous external abort in xhcigensetup() when setting up the host controller:

[ 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 : xhcigensetup+0xa4/0x408 [ 1301.393391] backtrace: ... xhcigensetup+0xa4/0x408 <-- CRASH xhciplatsetup+0x44/0x58 usbaddhcd+0x284/0x678 ... cdnsroleset+0x9c/0xbc <-- Role switch

Fix by calling cdnsdrdgadget_off() in the error path to properly clean up the DRD gadget state.

Database specific
{
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/31xxx/CVE-2026-31754.json",
    "cna_assigner": "Linux"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
7733f6c32e36ff9d7adadf40001039bf219b1cbe
Fixed
fb7110a052467098967284ef14d306810b354937
Fixed
9b1d301fbae837bf6979a19030b81d869bb15f7a
Fixed
cfca84f5986afceb63a3adf39d4a98e915aebbc2
Fixed
c7e475ae3a5593c5db21b3b7dca4ba8bdac9b47f
Fixed
5a85599ca4d2584d89dc69f4fc49303b75a42338
Fixed
b490f0e477d26d29ed51e5dc47e3b9bd31bcb49f
Fixed
c32f8748d70c8fc77676ad92ed76cede17bf2c48

Database specific

source
"https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2026-31754.json"

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
5.4.0
Fixed
5.15.203
Type
ECOSYSTEM
Events
Introduced
5.16.0
Fixed
6.1.168
Type
ECOSYSTEM
Events
Introduced
6.2.0
Fixed
6.6.134
Type
ECOSYSTEM
Events
Introduced
6.7.0
Fixed
6.12.81
Type
ECOSYSTEM
Events
Introduced
6.13.0
Fixed
6.18.22
Type
ECOSYSTEM
Events
Introduced
6.19.0
Fixed
6.19.12

Database specific

source
"https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2026-31754.json"