diff options
author | Hans de Goede <hdegoede@redhat.com> | 2014-09-24 14:06:08 +0200 |
---|---|---|
committer | Marek Vasut <marex@denx.de> | 2014-11-04 06:04:00 +0100 |
commit | dfe5b1c86f1a79841e00c68d71d8027b223d4aa7 (patch) | |
tree | 530fe085e0bb5d987a4dfdbc9d8e0a255b405137 | |
parent | be17e752f31f65d5e32d507d31819e6106d3a5bf (diff) | |
download | u-boot-imx-dfe5b1c86f1a79841e00c68d71d8027b223d4aa7.zip u-boot-imx-dfe5b1c86f1a79841e00c68d71d8027b223d4aa7.tar.gz u-boot-imx-dfe5b1c86f1a79841e00c68d71d8027b223d4aa7.tar.bz2 |
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.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/common/usb_kbd.c b/common/usb_kbd.c index cb869ac..253530a 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 |