From dfe5b1c86f1a79841e00c68d71d8027b223d4aa7 Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@redhat.com>
Date: Wed, 24 Sep 2014 14:06:08 +0200
Subject: [PATCH] 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>
---
 common/usb_kbd.c | 16 +++++++++++++---
 1 file 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
-- 
2.39.5