summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenoit Goby <benoit@android.com>2011-11-29 13:49:27 -0800
committerXinyu Chen <b03824@freescale.com>2011-12-06 17:19:37 +0800
commit746abb05cb4309a2fe23c754f3bb6adde0203415 (patch)
tree9338a2f675d1f5306e59f539ee542a27f0bc9d47
parenta9285bb05a60a8f71cd28e0c34efaba1bb2b7be1 (diff)
usb: gadget: android: Cancel pending ctrlrequest before disabling
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>
-rw-r--r--drivers/usb/gadget/android.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/usb/gadget/android.c b/drivers/usb/gadget/android.c
index f7dd3fe5e0e4..98c2f04225d0 100644
--- a/drivers/usb/gadget/android.c
+++ b/drivers/usb/gadget/android.c
@@ -839,6 +839,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 {