[coreboot-gerrit] Change in coreboot[master]: libpayload/drivers/usb: Fix leaks

Patrick Rudolph (Code Review) gerrit at coreboot.org
Sat Feb 10 12:11:04 CET 2018


Patrick Rudolph has uploaded this change for review. ( https://review.coreboot.org/23689


Change subject: libpayload/drivers/usb: Fix leaks
......................................................................

libpayload/drivers/usb: Fix leaks

Don't leak buffers on device detach.

Tested on Lenovo T500 using UHCI controller by attaching and
detaching USB devices a few hundred times.

Change-Id: Ib2d80dd4590aa0dacdf2da3b614c6505c931d0be
Signed-off-by: Patrick Rudolph <siro at das-labor.org>
---
M payloads/libpayload/drivers/usb/usb.c
M payloads/libpayload/drivers/usb/usb_dev.c
M payloads/libpayload/drivers/usb/usbhid.c
M payloads/libpayload/drivers/usb/usbmsc.c
4 files changed, 26 insertions(+), 0 deletions(-)



  git pull ssh://review.coreboot.org:29418/coreboot refs/changes/89/23689/1

diff --git a/payloads/libpayload/drivers/usb/usb.c b/payloads/libpayload/drivers/usb/usb.c
index 906df84..5d36585 100644
--- a/payloads/libpayload/drivers/usb/usb.c
+++ b/payloads/libpayload/drivers/usb/usb.c
@@ -669,6 +669,13 @@
 {
 	if (usb_generic_remove)
 		usb_generic_remove(dev);
+
+	if (dev->descriptor)
+		free(dev->descriptor);
+	dev->descriptor = 0;
+	if (dev->configuration)
+		free(dev->configuration);
+	dev->configuration = 0;
 }
 
 void
diff --git a/payloads/libpayload/drivers/usb/usb_dev.c b/payloads/libpayload/drivers/usb/usb_dev.c
index 9a0aecd..096c072 100644
--- a/payloads/libpayload/drivers/usb/usb_dev.c
+++ b/payloads/libpayload/drivers/usb/usb_dev.c
@@ -34,6 +34,8 @@
 {
 	if (dev->descriptor != 0)
 		free (dev->descriptor);
+	if (dev->configuration != 0)
+		free(dev->configuration);
 	usb_nop_init (dev);
 	dev->address = -1;
 	dev->hub = -1;
@@ -50,6 +52,7 @@
 usb_nop_init (usbdev_t *dev)
 {
 	dev->descriptor = 0;
+	dev->configuration = 0;
 	dev->destroy = usb_nop_destroy;
 	dev->poll = usb_nop_poll;
 }
diff --git a/payloads/libpayload/drivers/usb/usbhid.c b/payloads/libpayload/drivers/usb/usbhid.c
index 3100d37..08dae24 100644
--- a/payloads/libpayload/drivers/usb/usbhid.c
+++ b/payloads/libpayload/drivers/usb/usbhid.c
@@ -80,7 +80,17 @@
 				&dev->endpoints[i], HID_INST(dev)->queue);
 		HID_INST(dev)->queue = NULL;
 	}
+	if (HID_INST(dev)->descriptor)
+		free(HID_INST(dev)->descriptor);
+	HID_INST(dev)->descriptor = 0;
+
 	free (dev->data);
+	if (dev->descriptor)
+		free(dev->descriptor);
+	dev->descriptor = 0;
+	if (dev->configuration)
+		free(dev->configuration);
+	dev->configuration = 0;
 }
 
 /* keybuffer is global to all USB keyboards */
diff --git a/payloads/libpayload/drivers/usb/usbmsc.c b/payloads/libpayload/drivers/usb/usbmsc.c
index 2c7cbe5..866d23d 100644
--- a/payloads/libpayload/drivers/usb/usbmsc.c
+++ b/payloads/libpayload/drivers/usb/usbmsc.c
@@ -91,6 +91,12 @@
 		free (dev->data);
 	}
 	dev->data = 0;
+	if (dev->descriptor)
+		free(dev->descriptor);
+	dev->descriptor = 0;
+	if (dev->configuration)
+		free(dev->configuration);
+	dev->configuration = 0;
 }
 
 const int DEV_RESET = 0xff;

-- 
To view, visit https://review.coreboot.org/23689
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib2d80dd4590aa0dacdf2da3b614c6505c931d0be
Gerrit-Change-Number: 23689
Gerrit-PatchSet: 1
Gerrit-Owner: Patrick Rudolph <siro at das-labor.org>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180210/47e1b19d/attachment-0001.html>


More information about the coreboot-gerrit mailing list