From 1fea734e540ed84e93356381db9d694659477132 Mon Sep 17 00:00:00 2001 From: Patrick Rudolph Date: Sat, 10 Feb 2018 12:03:58 +0100 Subject: libpayload/drivers/usb: Fix leaks Don't leak buffers on device detach. Tested on qemu using: qemu-system-x86_64 -bios build/coreboot.rom -M pc -m 2048 -usb \ -device usb-ehci,id=ehci -device usb-mouse -device usb-audio,bus=usb-bus.0 \ -device usb-bt-dongle,bus=usb-bus.0 -device usb-kbd Change-Id: Ib2d80dd4590aa0dacdf2da3b614c6505c931d0be Signed-off-by: Patrick Rudolph Reviewed-on: https://review.coreboot.org/23689 Tested-by: build bot (Jenkins) Reviewed-by: Julius Werner --- payloads/libpayload/drivers/usb/usb.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'payloads/libpayload/drivers/usb/usb.c') 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]); -- cgit v1.2.3