diff options
author | Tal Shorer <tal.shorer@gmail.com> | 2016-04-25 16:53:29 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-04-26 17:50:02 -0400 |
commit | 607fb0f4d90cc9a4463bcb17c1417d8a709dfda1 (patch) | |
tree | 8179c4aa0618d839650e8c81a056d5a626179b58 /drivers/usb/musb/musb_gadget.c | |
parent | 02da2d72174c61988eb4456b53f405e3ebdebce4 (diff) |
usb: musb: gadget: nuke endpoint before setting its descriptor to NULL
Some functions, such as f_sourcesink, rely on an endpoint's desc
field during their requests' complete() callback, so clear it only
_after_ nuking all requests to avoid NULL pointer dereference.
Signed-off-by: Tal Shorer <tal.shorer@gmail.com>
Signed-off-by: Bin Liu <b-liu@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/musb/musb_gadget.c')
-rw-r--r-- | drivers/usb/musb/musb_gadget.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index 87bd578799a8..152865b36522 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c | |||
@@ -1164,12 +1164,12 @@ static int musb_gadget_disable(struct usb_ep *ep) | |||
1164 | musb_writew(epio, MUSB_RXMAXP, 0); | 1164 | musb_writew(epio, MUSB_RXMAXP, 0); |
1165 | } | 1165 | } |
1166 | 1166 | ||
1167 | musb_ep->desc = NULL; | ||
1168 | musb_ep->end_point.desc = NULL; | ||
1169 | |||
1170 | /* abort all pending DMA and requests */ | 1167 | /* abort all pending DMA and requests */ |
1171 | nuke(musb_ep, -ESHUTDOWN); | 1168 | nuke(musb_ep, -ESHUTDOWN); |
1172 | 1169 | ||
1170 | musb_ep->desc = NULL; | ||
1171 | musb_ep->end_point.desc = NULL; | ||
1172 | |||
1173 | schedule_work(&musb->irq_work); | 1173 | schedule_work(&musb->irq_work); |
1174 | 1174 | ||
1175 | spin_unlock_irqrestore(&(musb->lock), flags); | 1175 | spin_unlock_irqrestore(&(musb->lock), flags); |