From 9b68fb8b48be1830a83c96a105d0fcc09a10a165 Mon Sep 17 00:00:00 2001 From: Hemant Kumar Date: Fri, 5 Aug 2016 15:57:24 -0700 Subject: [PATCH] usb: gadget: configfs: Synchronizing bind/unbind using mutex lock Synchronization is required because bind/unbind can happen in two different contexts. For example, function unbind due to unregister_gadget_item can race with bind which is initiated from sysfs. Change-Id: Iec93a9d4cb2a10b833cbba0d5256b64161147de2 Signed-off-by: Hemant Kumar --- drivers/usb/gadget/configfs.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c index 3639890c0dc7..5db4fe9e3cdf 100644 --- a/drivers/usb/gadget/configfs.c +++ b/drivers/usb/gadget/configfs.c @@ -1738,7 +1738,10 @@ void unregister_gadget_item(struct config_item *item) { struct gadget_info *gi = to_gadget_info(item); + /* to protect race with gadget_dev_desc_UDC_store*/ + mutex_lock(&gi->lock); unregister_gadget(gi); + mutex_unlock(&gi->lock); } EXPORT_SYMBOL_GPL(unregister_gadget_item);