--- /dev/null
+From 511f3c5326eabe1ece35202a404c24c0aeacc246 Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Fri, 15 Mar 2013 14:02:14 -0400
+Subject: usb: gadget: udc-core: fix a regression during gadget driver unbinding
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit 511f3c5326eabe1ece35202a404c24c0aeacc246 upstream.
+
+This patch (as1666) fixes a regression in the UDC core. The core
+takes care of unbinding gadget drivers, and it does the unbinding
+before telling the UDC driver to turn off the controller hardware.
+When the call to the udc_stop callback is made, the gadget no longer
+has a driver. The callback routine should not be invoked with a
+pointer to the old driver; doing so can cause problems (such as
+use-after-free accesses in net2280).
+
+This patch should be applied, with appropriate context changes, to all
+the stable kernels going back to 3.1.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+
+---
+ drivers/usb/gadget/udc-core.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/gadget/udc-core.c
++++ b/drivers/usb/gadget/udc-core.c
+@@ -265,7 +265,7 @@ static void usb_gadget_remove_driver(str
+ udc->driver->disconnect(udc->gadget);
+ usb_gadget_disconnect(udc->gadget);
+ udc->driver->unbind(udc->gadget);
+- usb_gadget_udc_stop(udc->gadget, udc->driver);
++ usb_gadget_udc_stop(udc->gadget, NULL);
+ } else {
+ usb_gadget_stop(udc->gadget, udc->driver);
+ }