Skip to content

Commit cfdc67a

Browse files
pskrgagjhovold
authored andcommitted
USB: serial: io_edgeport: fix memory leak in edge_startup
sysbot found memory leak in edge_startup(). The problem was that when an error was received from the usb_submit_urb(), nothing was cleaned up. Reported-by: syzbot+59f777bdcbdd7eea5305@syzkaller.appspotmail.com Signed-off-by: Pavel Skripkin <paskripkin@gmail.com> Fixes: 6e8cf77 ("USB: add EPIC support to the io_edgeport driver") Cc: stable@vger.kernel.org # 2.6.21: c5c0c55 Signed-off-by: Johan Hovold <johan@kernel.org>
1 parent 5563b3b commit cfdc67a

1 file changed

Lines changed: 16 additions & 10 deletions

File tree

drivers/usb/serial/io_edgeport.c

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3003,26 +3003,32 @@ static int edge_startup(struct usb_serial *serial)
30033003
response = -ENODEV;
30043004
}
30053005

3006-
usb_free_urb(edge_serial->interrupt_read_urb);
3007-
kfree(edge_serial->interrupt_in_buffer);
3008-
3009-
usb_free_urb(edge_serial->read_urb);
3010-
kfree(edge_serial->bulk_in_buffer);
3011-
3012-
kfree(edge_serial);
3013-
3014-
return response;
3006+
goto error;
30153007
}
30163008

30173009
/* start interrupt read for this edgeport this interrupt will
30183010
* continue as long as the edgeport is connected */
30193011
response = usb_submit_urb(edge_serial->interrupt_read_urb,
30203012
GFP_KERNEL);
3021-
if (response)
3013+
if (response) {
30223014
dev_err(ddev, "%s - Error %d submitting control urb\n",
30233015
__func__, response);
3016+
3017+
goto error;
3018+
}
30243019
}
30253020
return response;
3021+
3022+
error:
3023+
usb_free_urb(edge_serial->interrupt_read_urb);
3024+
kfree(edge_serial->interrupt_in_buffer);
3025+
3026+
usb_free_urb(edge_serial->read_urb);
3027+
kfree(edge_serial->bulk_in_buffer);
3028+
3029+
kfree(edge_serial);
3030+
3031+
return response;
30263032
}
30273033

30283034

0 commit comments

Comments
 (0)