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