|
@@ -934,6 +934,12 @@ void xhci_free_virt_devices_depth_first(struct xhci_hcd *xhci, int slot_id)
|
|
|
if (!vdev)
|
|
|
return;
|
|
|
|
|
|
+ if (vdev->real_port == 0 ||
|
|
|
+ vdev->real_port > HCS_MAX_PORTS(xhci->hcs_params1)) {
|
|
|
+ xhci_dbg(xhci, "Bad vdev->real_port.\n");
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
tt_list_head = &(xhci->rh_bw[vdev->real_port - 1].tts);
|
|
|
list_for_each_entry_safe(tt_info, next, tt_list_head, tt_list) {
|
|
|
/* is this a hub device that added a tt_info to the tts list */
|
|
@@ -947,6 +953,7 @@ void xhci_free_virt_devices_depth_first(struct xhci_hcd *xhci, int slot_id)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+out:
|
|
|
/* we are now at a leaf device */
|
|
|
xhci_debugfs_remove_slot(xhci, slot_id);
|
|
|
xhci_free_virt_device(xhci, slot_id);
|