diff options
| author | Alan Stern <[email protected]> | 2025-08-25 16:00:22 +0000 |
|---|---|---|
| committer | Greg Kroah-Hartman <[email protected]> | 2025-09-06 13:29:50 +0000 |
| commit | 8d63c83d8eb922f6c316320f50c82fa88d099bea (patch) | |
| tree | e9e848dacd6164345a64b3fc43b945c232dc7602 /drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | |
| parent | xhci: fix memory leak regression when freeing xhci vdev devices depth first (diff) | |
| download | kernel-8d63c83d8eb922f6c316320f50c82fa88d099bea.tar.gz kernel-8d63c83d8eb922f6c316320f50c82fa88d099bea.zip | |
USB: gadget: dummy-hcd: Fix locking bug in RT-enabled kernels
Yunseong Kim and the syzbot fuzzer both reported a problem in
RT-enabled kernels caused by the way dummy-hcd mixes interrupt
management and spin-locking. The pattern was:
local_irq_save(flags);
spin_lock(&dum->lock);
...
spin_unlock(&dum->lock);
... // calls usb_gadget_giveback_request()
local_irq_restore(flags);
The code was written this way because usb_gadget_giveback_request()
needs to be called with interrupts disabled and the private lock not
held.
While this pattern works fine in non-RT kernels, it's not good when RT
is enabled. RT kernels handle spinlocks much like mutexes; in particular,
spin_lock() may sleep. But sleeping is not allowed while local
interrupts are disabled.
To fix the problem, rewrite the code to conform to the pattern used
elsewhere in dummy-hcd and other UDC drivers:
spin_lock_irqsave(&dum->lock, flags);
...
spin_unlock(&dum->lock);
usb_gadget_giveback_request(...);
spin_lock(&dum->lock);
...
spin_unlock_irqrestore(&dum->lock, flags);
This approach satisfies the RT requirements.
Signed-off-by: Alan Stern <[email protected]>
Cc: stable <[email protected]>
Fixes: b4dbda1a22d2 ("USB: dummy-hcd: disable interrupts during req->complete")
Reported-by: Yunseong Kim <[email protected]>
Closes: <https://lore.kernel.org/linux-usb/[email protected]/>
Reported-by: [email protected]
Closes: <https://lore.kernel.org/linux-usb/[email protected]/>
Tested-by: [email protected]
CC: Sebastian Andrzej Siewior <[email protected]>
CC: [email protected]
Reviewed-by: Sebastian Andrzej Siewior <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c')
0 files changed, 0 insertions, 0 deletions
