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 <[EMAIL PROTECTED]>

---

--- before/drivers/usb/serial/io_edgeport.c     2006-05-30 17:31:44.000000000 
-0700
+++ after/drivers/usb/serial/io_edgeport.c      2006-06-03 12:39:22.000000000 
-0700
@@ -2720,7 +2720,7 @@ static int edge_startup (struct usb_seri
        struct edgeport_serial *edge_serial;
        struct edgeport_port *edge_port;
        struct usb_device *dev;
-       int i;
+       int i, j;

        dev = serial->dev;

@@ -2785,6 +2785,10 @@ static int edge_startup (struct usb_seri
                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;


_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to