[PATCH] USB: free allocated memory on io_edgeport startup memory failure
authorChris Lund <docmax@gmail.com>
Sat, 3 Jun 2006 20:58:19 +0000 (13:58 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 21 Jun 2006 22:04:16 +0000 (15:04 -0700)
While an Edgeport is allocating individual port structures, if kmalloc
returns NULL, the serial structure is freed and -ENOMEM, but the ports
allocated before the failure are not freed.  This patch addresses that
condition.

Signed-off-by: Christopher Lund <docmax@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/serial/io_edgeport.c

index c28f1f6902c30d24f0a0b1747579fc9a20e42dfe..ed976ab56684ff05c59f959fe950f08e11cc6493 100644 (file)
@@ -2730,7 +2730,7 @@ static int edge_startup (struct usb_serial *serial)
        struct edgeport_serial *edge_serial;
        struct edgeport_port *edge_port;
        struct usb_device *dev;
-       int i;
+       int i, j;
 
        dev = serial->dev;
 
@@ -2794,6 +2794,10 @@ static int edge_startup (struct usb_serial *serial)
                edge_port = kmalloc (sizeof(struct edgeport_port), GFP_KERNEL);
                if (edge_port == NULL) {
                        dev_err(&serial->dev->dev, "%s - Out of memory\n", __FUNCTION__);
+                       for (j = 0; j < i; ++j) {
+                               kfree (usb_get_serial_port_data(serial->port[j]));
+                               usb_set_serial_port_data(serial->port[j],  NULL);
+                       }
                        usb_set_serial_data(serial, NULL);
                        kfree(edge_serial);
                        return -ENOMEM;