[PATCH] USB: free allocated memory on io_edgeport startup memory failure
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>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
14f76cc7ab
commit
bfd5df3c0c
@@ -2730,7 +2730,7 @@ static int edge_startup (struct usb_serial *serial)
|
|||||||
struct edgeport_serial *edge_serial;
|
struct edgeport_serial *edge_serial;
|
||||||
struct edgeport_port *edge_port;
|
struct edgeport_port *edge_port;
|
||||||
struct usb_device *dev;
|
struct usb_device *dev;
|
||||||
int i;
|
int i, j;
|
||||||
|
|
||||||
dev = serial->dev;
|
dev = serial->dev;
|
||||||
|
|
||||||
@@ -2794,6 +2794,10 @@ static int edge_startup (struct usb_serial *serial)
|
|||||||
edge_port = kmalloc (sizeof(struct edgeport_port), GFP_KERNEL);
|
edge_port = kmalloc (sizeof(struct edgeport_port), GFP_KERNEL);
|
||||||
if (edge_port == NULL) {
|
if (edge_port == NULL) {
|
||||||
dev_err(&serial->dev->dev, "%s - Out of memory\n", __FUNCTION__);
|
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);
|
usb_set_serial_data(serial, NULL);
|
||||||
kfree(edge_serial);
|
kfree(edge_serial);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
Reference in New Issue
Block a user