usb: configfs: synchronize the secure and udc_name state
authorYonghua Yan <yanyh2@motorola.com>
Thu, 27 Dec 2018 03:48:34 +0000 (11:48 +0800)
committerxiest1 <xiest1@lenovo.com>
Tue, 5 Nov 2019 09:32:09 +0000 (17:32 +0800)
The gadget driver unregister/probe is not allowed to reentry
for the same udc.

As the conditions for gadget driver unregister/probe entry,
gadget secure and udc_name status should be synchronized.
Otherwise, in old implement code logic, there is still a chance
to fall into trouble of gadget driver unregister/probe reentry
for the same udc.

Change-Id: I6eb30a36eab84afd656f5bee9678e8d44933c6bc
Signed-off-by: Yonghua Yan <yanyh2@motorola.com>
Reviewed-on: https://gerrit.mot.com/1287442
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Yuecai Liu <liuyc20@motorola.com>
Reviewed-by: Jianqi Yang <yangj@motorola.com>
Submit-Approved: Jira Key
Reviewed-on: https://gerrit.mot.com/1376191
Reviewed-by: Xiangpo Zhao <zhaoxp3@motorola.com>
drivers/usb/gadget/configfs.c

index c8d1f9c95a24fc51ba7e0a780a8513eafb5f5af2..beb9c932d4952a6aaa7c495944c82931558d7aa0 100755 (executable)
@@ -1870,15 +1870,19 @@ static ssize_t secure_store(struct device *pdev, struct device_attribute *attr,
        mode = !!mode;
        if (mode == gi->secure)
                return count;
+
+       mutex_lock(&gi->lock);
+
        gi->secure = mode;
 
-       if (!gi->composite.gadget_driver.udc_name)
+       if (!gi->composite.gadget_driver.udc_name) {
+               mutex_unlock(&gi->lock);
                return count;
+       }
        pr_debug("Secure Store , UDC = %s, secure = %d\n",
                                gi->composite.gadget_driver.udc_name,
                                gi->secure);
 
-       mutex_lock(&gi->lock);
        if (gi->secure) {
                ret = usb_gadget_unregister_driver(
                                &gi->composite.gadget_driver);