<p>Patrick Rudolph has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/23689">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">libpayload/drivers/usb: Fix leaks<br><br>Don't leak buffers on device detach.<br><br>Tested on Lenovo T500 using UHCI controller by attaching and<br>detaching USB devices a few hundred times.<br><br>Change-Id: Ib2d80dd4590aa0dacdf2da3b614c6505c931d0be<br>Signed-off-by: Patrick Rudolph <siro@das-labor.org><br>---<br>M payloads/libpayload/drivers/usb/usb.c<br>M payloads/libpayload/drivers/usb/usb_dev.c<br>M payloads/libpayload/drivers/usb/usbhid.c<br>M payloads/libpayload/drivers/usb/usbmsc.c<br>4 files changed, 26 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/89/23689/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/payloads/libpayload/drivers/usb/usb.c b/payloads/libpayload/drivers/usb/usb.c</span><br><span>index 906df84..5d36585 100644</span><br><span>--- a/payloads/libpayload/drivers/usb/usb.c</span><br><span>+++ b/payloads/libpayload/drivers/usb/usb.c</span><br><span>@@ -669,6 +669,13 @@</span><br><span> {</span><br><span>      if (usb_generic_remove)</span><br><span>              usb_generic_remove(dev);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (dev->descriptor)</span><br><span style="color: hsl(120, 100%, 40%);">+               free(dev->descriptor);</span><br><span style="color: hsl(120, 100%, 40%);">+     dev->descriptor = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (dev->configuration)</span><br><span style="color: hsl(120, 100%, 40%);">+            free(dev->configuration);</span><br><span style="color: hsl(120, 100%, 40%);">+  dev->configuration = 0;</span><br><span> }</span><br><span> </span><br><span> void</span><br><span>diff --git a/payloads/libpayload/drivers/usb/usb_dev.c b/payloads/libpayload/drivers/usb/usb_dev.c</span><br><span>index 9a0aecd..096c072 100644</span><br><span>--- a/payloads/libpayload/drivers/usb/usb_dev.c</span><br><span>+++ b/payloads/libpayload/drivers/usb/usb_dev.c</span><br><span>@@ -34,6 +34,8 @@</span><br><span> {</span><br><span>        if (dev->descriptor != 0)</span><br><span>                 free (dev->descriptor);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (dev->configuration != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               free(dev->configuration);</span><br><span>         usb_nop_init (dev);</span><br><span>  dev->address = -1;</span><br><span>        dev->hub = -1;</span><br><span>@@ -50,6 +52,7 @@</span><br><span> usb_nop_init (usbdev_t *dev)</span><br><span> {</span><br><span>   dev->descriptor = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+       dev->configuration = 0;</span><br><span>   dev->destroy = usb_nop_destroy;</span><br><span>   dev->poll = usb_nop_poll;</span><br><span> }</span><br><span>diff --git a/payloads/libpayload/drivers/usb/usbhid.c b/payloads/libpayload/drivers/usb/usbhid.c</span><br><span>index 3100d37..08dae24 100644</span><br><span>--- a/payloads/libpayload/drivers/usb/usbhid.c</span><br><span>+++ b/payloads/libpayload/drivers/usb/usbhid.c</span><br><span>@@ -80,7 +80,17 @@</span><br><span>                          &dev->endpoints[i], HID_INST(dev)->queue);</span><br><span>                 HID_INST(dev)->queue = NULL;</span><br><span>      }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (HID_INST(dev)->descriptor)</span><br><span style="color: hsl(120, 100%, 40%);">+             free(HID_INST(dev)->descriptor);</span><br><span style="color: hsl(120, 100%, 40%);">+   HID_INST(dev)->descriptor = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  free (dev->data);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (dev->descriptor)</span><br><span style="color: hsl(120, 100%, 40%);">+               free(dev->descriptor);</span><br><span style="color: hsl(120, 100%, 40%);">+     dev->descriptor = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (dev->configuration)</span><br><span style="color: hsl(120, 100%, 40%);">+            free(dev->configuration);</span><br><span style="color: hsl(120, 100%, 40%);">+  dev->configuration = 0;</span><br><span> }</span><br><span> </span><br><span> /* keybuffer is global to all USB keyboards */</span><br><span>diff --git a/payloads/libpayload/drivers/usb/usbmsc.c b/payloads/libpayload/drivers/usb/usbmsc.c</span><br><span>index 2c7cbe5..866d23d 100644</span><br><span>--- a/payloads/libpayload/drivers/usb/usbmsc.c</span><br><span>+++ b/payloads/libpayload/drivers/usb/usbmsc.c</span><br><span>@@ -91,6 +91,12 @@</span><br><span>              free (dev->data);</span><br><span>         }</span><br><span>    dev->data = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (dev->descriptor)</span><br><span style="color: hsl(120, 100%, 40%);">+               free(dev->descriptor);</span><br><span style="color: hsl(120, 100%, 40%);">+     dev->descriptor = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (dev->configuration)</span><br><span style="color: hsl(120, 100%, 40%);">+            free(dev->configuration);</span><br><span style="color: hsl(120, 100%, 40%);">+  dev->configuration = 0;</span><br><span> }</span><br><span> </span><br><span> const int DEV_RESET = 0xff;</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/23689">change 23689</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/23689"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ib2d80dd4590aa0dacdf2da3b614c6505c931d0be </div>
<div style="display:none"> Gerrit-Change-Number: 23689 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Patrick Rudolph <siro@das-labor.org> </div>