mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
usb: core: Add lock to usb_wakeup_notification()
Add a spin lock to usb_wakeup notification to prevent a race condition with dereferencing freed memory. This could be hit by the xHCI driver as it calls this function from an IRQ and could race with the hub_disconnect() function, which properly grabs this lock to protect the state of the device. Assisted-by: gkh_clanker_t1000 Signed-off-by: Griffin Kroah-Hartman <griffin@kroah.com> Link: https://patch.msgid.link/20260713-usb_core_patches_1-v1-3-7721c2b33f53@kroah.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
c9a934ddee
commit
e263e18a9e
|
|
@ -753,10 +753,12 @@ void usb_wakeup_notification(struct usb_device *hdev,
|
|||
{
|
||||
struct usb_hub *hub;
|
||||
struct usb_port *port_dev;
|
||||
unsigned long flags;
|
||||
|
||||
if (!hdev)
|
||||
return;
|
||||
|
||||
spin_lock_irqsave(&device_state_lock, flags);
|
||||
hub = usb_hub_to_struct_hub(hdev);
|
||||
if (hub) {
|
||||
port_dev = hub->ports[portnum - 1];
|
||||
|
|
@ -766,6 +768,7 @@ void usb_wakeup_notification(struct usb_device *hdev,
|
|||
set_bit(portnum, hub->wakeup_bits);
|
||||
kick_hub_wq(hub);
|
||||
}
|
||||
spin_unlock_irqrestore(&device_state_lock, flags);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(usb_wakeup_notification);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user