]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/usb_kbd.c
usb: kbd: Fix memleak on usb_kbd_deregister()
[karo-tx-uboot.git] / common / usb_kbd.c
index cb869acfb74264777617064ca2e1310037d9cf14..253530a1b6e6799b21675f78041f368cd81d7903 100644 (file)
@@ -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