public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] usb: gadget: udc-core: call udc_stop() before gadget unbind
@ 2014-12-12 13:17 Robert Baldyga
  2014-12-12 13:51 ` Krzysztof Opasiak
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Robert Baldyga @ 2014-12-12 13:17 UTC (permalink / raw)
  To: balbi
  Cc: gregkh, peter.chen, linux-usb, linux-kernel, m.szyprowski,
	k.opasiak, Robert Baldyga

As usb function drivers assumes that all usb request will be completed
before function unbind call, we should supply such behavior. In some
cases ep_disable() won't kill all request effectively, because some
IN requests can be in running state. In such situation it's possible
to have unbind function called before last request completion, which
can cause problems.

For example unbinding f_ecm function while request on 'notify' endpoint
is not completed, ends up NULL pointer dereference in unbind() function.

usb_gadget_udc_stop() call causes completion of all requests so if it's
called before gadget unbind there is no risk that some of requests will
stay uncompleted.

Signed-off-by: Robert Baldyga <r.baldyga@samsung.com>
---
 drivers/usb/gadget/udc/udc-core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
index e31d574..6f0d233 100644
--- a/drivers/usb/gadget/udc/udc-core.c
+++ b/drivers/usb/gadget/udc/udc-core.c
@@ -331,8 +331,8 @@ static void usb_gadget_remove_driver(struct usb_udc *udc)
 
 	usb_gadget_disconnect(udc->gadget);
 	udc->driver->disconnect(udc->gadget);
-	udc->driver->unbind(udc->gadget);
 	usb_gadget_udc_stop(udc);
+	udc->driver->unbind(udc->gadget);
 
 	udc->driver = NULL;
 	udc->dev.driver = NULL;
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2014-12-29 16:39 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-12 13:17 [PATCH] usb: gadget: udc-core: call udc_stop() before gadget unbind Robert Baldyga
2014-12-12 13:51 ` Krzysztof Opasiak
2014-12-15  5:13 ` Peter Chen
2014-12-15 10:05   ` Robert Baldyga
2014-12-22 16:34     ` Felipe Balbi
2014-12-23  6:34       ` Robert Baldyga
2014-12-23 18:31         ` Felipe Balbi
2014-12-29  7:30           ` Robert Baldyga
2014-12-29 16:39             ` Felipe Balbi
2014-12-15 16:14 ` Alan Stern
2014-12-22 16:32 ` Felipe Balbi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox