mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 22:51:42 +00:00
usb: dbgp gadget: fix use after free in dbgp_unbind()
After dbgp_bind()-dbgp_unbind() cycle happens, static variable dbgp contains pointers to already deallocated memory (dbgp.serial and dbgp.req). If the next dbgp_bind() fails, for example in usb_ep_alloc_request(), dbgp_bind() calls dbgp_unbind() on failure path, and dbgp_unbind() frees dbgp.serial that still stores a pointer to already deallocated memory. The patch sets pointers to NULL in dbgp_unbind(). Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
0c5824083b
commit
4958cf32f6
@ -222,10 +222,12 @@ static void dbgp_unbind(struct usb_gadget *gadget)
|
||||
{
|
||||
#ifdef CONFIG_USB_G_DBGP_SERIAL
|
||||
kfree(dbgp.serial);
|
||||
dbgp.serial = NULL;
|
||||
#endif
|
||||
if (dbgp.req) {
|
||||
kfree(dbgp.req->buf);
|
||||
usb_ep_free_request(gadget->ep0, dbgp.req);
|
||||
dbgp.req = NULL;
|
||||
}
|
||||
|
||||
gadget->ep0->driver_data = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user