staging: usbip: userspace: Memory leak in usbip_exported_device_new
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Thu, 27 Feb 2014 13:25:19 +0000 (14:25 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 28 Feb 2014 22:18:29 +0000 (14:18 -0800)
Memory was leaked and a device not closed if we ran out of memory on the
system.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c

index 86a867582de6a4beaf8e5a9f061de42a1199363b..35b2f5b0e350f0d2bd17175a0266bff6bbdca31d 100644 (file)
@@ -101,6 +101,7 @@ static int32_t read_attr_usbip_status(struct usbip_usb_device *udev)
 static struct usbip_exported_device *usbip_exported_device_new(char *sdevpath)
 {
        struct usbip_exported_device *edev = NULL;
+       struct usbip_exported_device *edev_old;
        size_t size;
        int i;
 
@@ -126,8 +127,10 @@ static struct usbip_exported_device *usbip_exported_device_new(char *sdevpath)
        size = sizeof(*edev) + edev->udev.bNumInterfaces *
                sizeof(struct usbip_usb_interface);
 
+       edev_old = edev;
        edev = realloc(edev, size);
        if (!edev) {
+               edev = edev_old;
                dbg("realloc failed");
                goto err;
        }