usb: gadget: android: Cancel pending ctrlrequest before disabling
authorBenoit Goby <benoit@android.com>
Tue, 29 Nov 2011 21:49:27 +0000 (13:49 -0800)
committerBenoit Goby <benoit@android.com>
Wed, 30 Nov 2011 03:34:20 +0000 (19:34 -0800)
Make sure there is no pending ctrlrequest before removing the config.
Otherwise the ctrlrequest complete callback could access structures
after they have been freed. Unbind cancels pending transfers but not
ep0 requests.

Bug: 5513065 5440193

Change-Id: I063c22bf5d104a3d2df71cf622409459fac5f27a
Signed-off-by: Benoit Goby <benoit@android.com>
drivers/usb/gadget/android.c

index 5d77899678f9e3d306cecda3d11599ce8d919a68..2b7631052ea78d9d89df6c2d071054d4c1a5ac7b 100644 (file)
@@ -837,6 +837,8 @@ static ssize_t enable_store(struct device *pdev, struct device_attribute *attr,
                dev->enabled = true;
        } else if (!enabled && dev->enabled) {
                usb_gadget_disconnect(cdev->gadget);
+               /* Cancel pending control requests */
+               usb_ep_dequeue(cdev->gadget->ep0, cdev->req);
                usb_remove_config(cdev, &android_config_driver);
                dev->enabled = false;
        } else {