mirror of https://gitee.com/openkylin/linux.git
xhci: Add an assertion to check for virt_dev=0 bug.
During a "plug-unplug" stress test on an NEC xHCI card, a null pointer dereference was observed. xhci_address_device() dereferenced a null virt_dev (possibly an erroneous udev->slot_id?); this patch adds a WARN_ON & message to aid debug if it can be recreated. Signed-off-by: Matt Evans <matt@ozlabs.org> Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
This commit is contained in:
parent
92a3da410a
commit
7ed603ecf8
|
@ -2546,6 +2546,17 @@ int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)
|
|||
|
||||
virt_dev = xhci->devs[udev->slot_id];
|
||||
|
||||
if (WARN_ON(!virt_dev)) {
|
||||
/*
|
||||
* In plug/unplug torture test with an NEC controller,
|
||||
* a zero-dereference was observed once due to virt_dev = 0.
|
||||
* Print useful debug rather than crash if it is observed again!
|
||||
*/
|
||||
xhci_warn(xhci, "Virt dev invalid for slot_id 0x%x!\n",
|
||||
udev->slot_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
slot_ctx = xhci_get_slot_ctx(xhci, virt_dev->in_ctx);
|
||||
/*
|
||||
* If this is the first Set Address since device plug-in or
|
||||
|
|
Loading…
Reference in New Issue