xhci: Fix use-after-free in xhci_free_virt_device
Subsystems (3)
PATCH 1/1 xhci: Fix use-after-free in xhci_free_virt_device
KASAN found a use-after-free in xhci_free_virt_device+0x33b/0x38e where xhci_free_virt_device() sets slot id to 0 if udev exists:
if (dev->udev && dev->udev->slot_id)
dev->udev->slot_id = 0;
dev->udev will be true even if udev is freed because dev->udev is not set to NULL.
set dev->udev pointer to NULL in xhci_free_dev()
The original patch went to stable so this fix needs to be applied there as well.
Fixes a400efe455f7 ("xhci: zero usb device slot_id member when disabling and freeing a xhci slot")
Cc <[email protected]>
Reported-by Guenter Roeck <[email protected]>
Reviewed-by Guenter Roeck <[email protected]>
Tested-by Guenter Roeck <[email protected]>
Signed-off-by Mathias Nyman <[email protected]>
--- drivers/usb/host/xhci.c | 1 + 1 file changed, 1 insertion(+)
drivers/usb/host/xhci.c +1 -0
@@ -3621,6 +3621,7 @@ static void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev)del_timer_sync (&virt_dev->eps[i].stop_cmd_timer); }xhci_debugfs_remove_slot (xhci, udev->slot_id); + virt_dev->udev =NULL ; ret =xhci_disable_slot (xhci, udev->slot_id);if (ret)xhci_free_virt_device (xhci, udev->slot_id);
Signature · 1 line
2.7.4