CVE-2026-80861: usb: xhci: bail out of setup if the controller is inaccessible

Published Sep 4, 2026
·
Updated

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

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

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

xhci->opregs = hcd->regs + HCLENGTH(readl(&xhci->capregs->hccapbase));

If the controller is dead or has dropped off the bus, that read returns ~0, HCLENGTH() truncates it to 0xff, and opregs ends up 0xff bytes past the page-aligned MMIO base, i.e. unaligned. The first access through it, xhcihalt() -> xhcihandshake() reading opregs->status, is then an unaligned readl() on device memory. arm64 faults on unaligned device accesses, so instead of xhcihandshake() 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 : xhcihalt [xhcihcd] Call trace: xhcihalt xhcigensetup xhcipcisetup usbaddhcd usbhcdpciprobe xhcipcicommonprobe xhcipcirenesasprobe

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 xhcihandshake() and xhcireset() already test for), abort setup with -ENODEV before opregs is derived from it. Reading it once also avoids re-reading a register that may change under a concurrent hot-removal.

Affected Software

1 affected component
The Linux Kernel Project Linux Kernel

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Configuration

    Apply the kernel fix so that the xHCI driver detects controller inaccessibility and bails out of setup/PCI probe (return -ENODEV) before deriving op_regs from cap_regs->hc_capbase, preventing the subsequent unaligned readl()/MMIO access and probe-time Oops.

    Linux kernel USB xHCI (xhci) bail out of setup if controller is inaccessible (ENODEV check before deriving op_regs) = enabled

Event History

Sep 4, 2026
CVE Published
via MITRE·03:55 PM
Data Sourced
via MITRE·03:55 PM
Description

Frequently Asked Questions

1

Which systems are most likely to experience a kernel fault from this issue?

The described failure specifically affects arm64 systems, where an unaligned read from device memory faults. It occurs when an xHCI USB controller is dead, inaccessible, or has dropped off the bus during controller setup.

2

What conditions trigger the failure?

The controller's initial capability-register read must return an all-ones value, such as when the device cannot be accessed. The provided example shows a controller that could not transition from D3cold to D0 before the kernel attempted to initialize it.

3

How can an administrator identify that this issue has occurred?

Kernel logs may report that the xHCI controller is inaccessible, followed by registration of a new USB bus and an alignment-fault kernel oops. The example includes an "Unable to change power state from D3cold to D0" message and an "Unable to handle kernel paging request" alignment fault in xhci_halt or xhci_handshake.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203