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

usb: xhci: bail out of setup if the controller is inaccessible

xhci_gen_setup() locates the operational registers using the capability
length read from the very first register:

xhci->op_regs = hcd->regs +
HC_LENGTH(readl(&xhci->cap_regs->hc_capbase));

If the controller is dead or has dropped off the bus, that read returns
~0, HC_LENGTH() truncates it to 0xff, and op_regs ends up 0xff bytes
past the page-aligned MMIO base, i.e. unaligned. The first access
through it, xhci_halt() -> xhci_handshake() reading op_regs->status, is
then an unaligned readl() on device memory. arm64 faults on unaligned
device accesses, so instead of xhci_handshake() catching the all-ones
value and returning -ENODEV, setup oopses:

xhci-pci-renesas 0005:08:00.0: Unable to change power state from D3cold to D0, device inaccessible
xhci-pci-renesas 0005:08:00.0: xHCI Host Controller
xhci-pci-renesas 0005:08:00.0: new USB bus registered, assigned bus number 1
Unable to handle kernel paging request at virtual address ffff80030a770103
ESR = 0x0000000096000021
FSC = 0x21: alignment fault
Internal error: Oops: 0000000096000021 [#1] SMP
pc : xhci_halt [xhci_hcd]
Call trace:
xhci_halt
xhci_gen_setup
xhci_pci_setup
usb_add_hcd
usb_hcd_pci_probe
xhci_pci_common_probe
xhci_pci_renesas_probe

This was hit with a Renesas uPD720201 that failed to power up ("Unable
to change power state from D3cold to D0, device inaccessible") yet still
reached the HCD probe path.

Read the capability register once, and if it reads back the all-ones
value (as xhci_handshake() and xhci_reset() already test for), abort
setup with -ENODEV before op_regs is derived from it. Reading it once
also avoids re-reading a register that may change under a concurrent
hot-removal.
Published: 2026-09-04
Score: n/a
EPSS: < 1% Very Low
KEV: No
Impact: Kernel Crash / Denial of Service
Action: Immediate Patch
AI Analysis

Impact

The bug originates in the xhci host controller setup routine. When the controller is dead or has dropped off the bus, the driver reads the first capability register and interprets any 0xFFFFFFFF value as the length of the operational registers. Truncating that all‑ones value to 0xff produces a pointer that is 0xff bytes past the MMIO base, causing an unaligned read on ARM64. The result is a kernel oops that brings the system down, reset, or requires a reboot. An attacker could trigger this by forcing a power state failure or hot‑removal of the USB controller, thereby causing the driver to crash. The impact is a denial of service at the kernel level.

Affected Systems

This issue affects the Linux kernel wherever the xhci host controller code is present and the controller is subject to accidental or malicious power state changes. It applies to all kernel versions that implement the buggy path before the fix commit (for example, older 6.x releases that predates the 0b31744 patch). No explicit version range is supplied, but any kernel using the xhci code without the all‑ones capability check is vulnerable.

Risk and Exploitability

EPSS data is unavailable and the vulnerability is not listed in CISA KEV, but the absence of a public exploit does not diminish the severity: a kernel crash is a catastrophic failure. The likely attack vector is local, requiring a device that can be powered off or moved while the kernel is enumerating it. In constrained environments with hard‑or soft‑disabled power management, the risk is elevated. While the exploit cannot be carried out purely over the network, it can serve as a reliable denial‑of-service in hosted environments that rely on USB connectivity.

Generated by OpenCVE AI on September 4, 2026 at 20:53 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Update the Linux kernel to a later stable release that includes the xhci patch commit (e.g., from kernel 6.1.5 or newer).
  • If a kernel upgrade is not immediately possible, apply the upstream patch that checks for the all‑ones capability length before deriving the operational registers pointer and aborts with -ENODEV.
  • As a temporary measure, disable the affected USB host controller via kernel module options or by disabling the device in the BIOS/UEFI if frequent power state failures are observed.
  • Verify that any devices connected to the controller are fully powered before enumeration and avoid removing controllers during the probe phase.

Generated by OpenCVE AI on September 4, 2026 at 20:53 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 21 Sep 2026 13:30:00 +0000


Fri, 11 Sep 2026 10:15:00 +0000


Fri, 04 Sep 2026 21:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-476
CWE-665

Fri, 04 Sep 2026 16:00:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: usb: xhci: bail out of setup if the controller is inaccessible xhci_gen_setup() locates the operational registers using the capability length read from the very first register: xhci->op_regs = hcd->regs + HC_LENGTH(readl(&xhci->cap_regs->hc_capbase)); If the controller is dead or has dropped off the bus, that read returns ~0, HC_LENGTH() truncates it to 0xff, and op_regs ends up 0xff bytes past the page-aligned MMIO base, i.e. unaligned. The first access through it, xhci_halt() -> xhci_handshake() reading op_regs->status, is then an unaligned readl() on device memory. arm64 faults on unaligned device accesses, so instead of xhci_handshake() catching the all-ones value and returning -ENODEV, setup oopses: xhci-pci-renesas 0005:08:00.0: Unable to change power state from D3cold to D0, device inaccessible xhci-pci-renesas 0005:08:00.0: xHCI Host Controller xhci-pci-renesas 0005:08:00.0: new USB bus registered, assigned bus number 1 Unable to handle kernel paging request at virtual address ffff80030a770103 ESR = 0x0000000096000021 FSC = 0x21: alignment fault Internal error: Oops: 0000000096000021 [#1] SMP pc : xhci_halt [xhci_hcd] Call trace: xhci_halt xhci_gen_setup xhci_pci_setup usb_add_hcd usb_hcd_pci_probe xhci_pci_common_probe xhci_pci_renesas_probe This was hit with a Renesas uPD720201 that failed to power up ("Unable to change power state from D3cold to D0, device inaccessible") yet still reached the HCD probe path. Read the capability register once, and if it reads back the all-ones value (as xhci_handshake() and xhci_reset() already test for), abort setup with -ENODEV before op_regs is derived from it. Reading it once also avoids re-reading a register that may change under a concurrent hot-removal.
Title usb: xhci: bail out of setup if the controller is inaccessible
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-09-21T13:14:16.522Z

Reserved: 2026-08-26T14:34:25.798Z

Link: CVE-2026-80861

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-04T16:18:15.290

Modified: 2026-09-21T14:17:21.167

Link: CVE-2026-80861

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-05T02:15:06Z

Weaknesses