usb:Restore linked_func list in none-secure mode
authora17671 <a17671@motorola.com>
Mon, 18 Nov 2019 07:56:16 +0000 (15:56 +0800)
committerPDO SCM Team <hudsoncm@motorola.com>
Thu, 21 Nov 2019 03:19:12 +0000 (21:19 -0600)
In none-secure mode, there is still
A low chance of gadget NULL case,
Restore the binded functions list back to
Linked_func list, so next time unbind functions
Could be handled correctly without memory corruption
This is a Samsung platform only issue

Change-Id: Ie46fc52d3eaa6ef60c1a4f6bb83a56229Montana854d
Signed-off-by: a17671 <a17671@motorola.com>
Reviewed-on: https://gerrit.mot.com/1456923
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Xiangpo Zhao <zhaoxp3@motorola.com>
Submit-Approved: Jira Key

drivers/usb/gadget/configfs.c

index 3d2e8fca514501aa84e29c7722871dfbb0c1da54..4ad3a08beb7bdd23abc8852cc461a1cc4047dc8a 100755 (executable)
@@ -1779,6 +1779,14 @@ static ssize_t enable_store(struct device *pdev, struct device_attribute *attr,
        if (!dev->secure) {
                if (!gadget) {
                        pr_info("%s: Gadget is NULL: %p\n", __func__, gadget);
+                       list_for_each_entry(c, &cdev->configs, list) {
+                       cfg = container_of(c, struct config_usb_cfg, c);
+                       list_for_each_entry_safe(f, tmp, &cfg->func_list, list) {
+                               list_move_tail(&f->list, &dev->linked_func);
+                       }
+                       c->next_interface_id = 0;
+                       memset(c->interface, 0, sizeof(c->interface));
+                       }
                        mutex_unlock(&dev->lock);
                        return -ENODEV;
                }