Skip to content

Commit

Permalink
USB: serial: io_edgeport: fix memory leak in edge_startup
Browse files Browse the repository at this point in the history
commit cfdc67a upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
pskrgag authored and gregkh committed Mar 17, 2021
1 parent c1b20c6 commit 5287c3d
Showing 1 changed file with 16 additions and 10 deletions.
26 changes: 16 additions & 10 deletions drivers/usb/serial/io_edgeport.c
Expand Up @@ -3003,26 +3003,32 @@ static int edge_startup(struct usb_serial *serial)
response = -ENODEV;
}

usb_free_urb(edge_serial->interrupt_read_urb);
kfree(edge_serial->interrupt_in_buffer);

usb_free_urb(edge_serial->read_urb);
kfree(edge_serial->bulk_in_buffer);

kfree(edge_serial);

return response;
goto error;
}

/* start interrupt read for this edgeport this interrupt will
* continue as long as the edgeport is connected */
response = usb_submit_urb(edge_serial->interrupt_read_urb,
GFP_KERNEL);
if (response)
if (response) {
dev_err(ddev, "%s - Error %d submitting control urb\n",
__func__, response);

goto error;
}
}
return response;

error:
usb_free_urb(edge_serial->interrupt_read_urb);
kfree(edge_serial->interrupt_in_buffer);

usb_free_urb(edge_serial->read_urb);
kfree(edge_serial->bulk_in_buffer);

kfree(edge_serial);

return response;
}


Expand Down

0 comments on commit 5287c3d

Please sign in to comment.