summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2014-09-24 14:06:08 +0200
committerMarek Vasut <marex@denx.de>2014-11-04 06:04:00 +0100
commitdfe5b1c86f1a79841e00c68d71d8027b223d4aa7 (patch)
tree530fe085e0bb5d987a4dfdbc9d8e0a255b405137
parentbe17e752f31f65d5e32d507d31819e6106d3a5bf (diff)
downloadblackbird-obmc-uboot-dfe5b1c86f1a79841e00c68d71d8027b223d4aa7.tar.gz
blackbird-obmc-uboot-dfe5b1c86f1a79841e00c68d71d8027b223d4aa7.zip
usb: kbd: Fix memleak on usb_kbd_deregister()
Free the keyboard hid-report buffer and private data on deregister. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-rw-r--r--common/usb_kbd.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/common/usb_kbd.c b/common/usb_kbd.c
index cb869acfb7..253530a1b6 100644
--- a/common/usb_kbd.c
+++ b/common/usb_kbd.c
@@ -524,9 +524,19 @@ int drv_usb_kbd_init(void)
int usb_kbd_deregister(int force)
{
#ifdef CONFIG_SYS_STDIO_DEREGISTER
- int ret = stdio_deregister(DEVNAME, force);
- if (ret && ret != -ENODEV)
- return ret;
+ struct stdio_dev *dev;
+ struct usb_device *usb_kbd_dev;
+ struct usb_kbd_pdata *data;
+
+ dev = stdio_get_by_name(DEVNAME);
+ if (dev) {
+ usb_kbd_dev = (struct usb_device *)dev->priv;
+ data = usb_kbd_dev->privptr;
+ if (stdio_deregister_dev(dev, force) != 0)
+ return 1;
+ free(data->new);
+ free(data);
+ }
return 0;
#else
OpenPOWER on IntegriCloud