summaryrefslogtreecommitdiff
path: root/payloads/libpayload/drivers/usb/usb.c
diff options
context:
space:
mode:
Diffstat (limited to 'payloads/libpayload/drivers/usb/usb.c')
-rw-r--r--payloads/libpayload/drivers/usb/usb.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/payloads/libpayload/drivers/usb/usb.c b/payloads/libpayload/drivers/usb/usb.c
index a6d5d43c23..62604a27ca 100644
--- a/payloads/libpayload/drivers/usb/usb.c
+++ b/payloads/libpayload/drivers/usb/usb.c
@@ -638,8 +638,15 @@ usb_detach_device(hci_t *controller, int devno)
been called yet by the usb class driver */
if (controller->devices[devno]) {
controller->devices[devno]->destroy (controller->devices[devno]);
+
if (controller->destroy_device)
controller->destroy_device(controller, devno);
+
+ free(controller->devices[devno]->descriptor);
+ controller->devices[devno]->descriptor = NULL;
+ free(controller->devices[devno]->configuration);
+ controller->devices[devno]->configuration = NULL;
+
/* Tear down the device itself *after* destroy_device()
* has had a chance to interoogate it. */
free(controller->devices[devno]);