[SRU][N/Q/R][PATCH 0/1] USB camera lost after suspend due to xhci endpoint_reset failure

Aaron Ma aaron.ma at canonical.com
Mon May 25 08:58:14 UTC 2026


BugLink: https://bugs.launchpad.net/bugs/2153966

SRU Justification:

[ Impact ]
USB camera is lost after suspend. xhci_endpoint_disable() clears
host_ep->hcpriv = NULL, which breaks xhci_endpoint_reset(). When uvcvideo
calls usb_set_interface(), submits URBs that make host sequence state
non-zero, then calls usb_clear_halt(), the device clears its sequence state
but xhci_endpoint_reset() bails out because hcpriv is NULL. The next URB
malfunctions: USB2 loses one packet, USB3 gets Transaction Error or may
not complete at all on some host controllers from ASMedia and AMD.

[ Fix ]
Cherry-pick upstream mainline commit:
- 25e531b422dc ("usb: xhci: Make usb_host_endpoint.hcpriv survive endpoint_disable()")

Fixes: 18b74067ac78 ("xhci: Fix use-after-free regression in xhci clear hub TT implementation")
Cc: stable at vger.kernel.org

[ Test Plan ]
1. System with USB camera (uvcvideo bulk video device)
2. Suspend and resume the system
3. Verify camera is still available (/dev/video0 exists)
4. Verify no Transaction Errors in dmesg
5. Verify camera works in application (e.g. cheese, guvcview)

[ Where problems could occur ]
The fix removes one line (host_ep->hcpriv = NULL) from xhci_endpoint_disable().
Risk is very low - the commit message explains hcpriv should only be NULL on
emulated root hub endpoints, and core should not try to reset dropped endpoints.


Michal Pecio (1):
  usb: xhci: Make usb_host_endpoint.hcpriv survive endpoint_disable()

 drivers/usb/host/xhci.c | 1 -
 include/linux/usb.h     | 3 ++-
 2 files changed, 2 insertions(+), 2 deletions(-)

-- 
2.43.0



More information about the kernel-team mailing list