usb:Restore linked_func list in none-secure mode
authora17671 <a17671@motorola.com>
Mon, 18 Nov 2019 07:56:16 +0000 (15:56 +0800)
committerCosmin Tanislav <demonsingur@gmail.com>
Mon, 22 Apr 2024 17:24:01 +0000 (20:24 +0300)
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 d8d00529c4be108b6280d84f3a80689367ab0f50..5d5e1a0d26f41ca9df43237b6b6b971485b6eff4 100755 (executable)
@@ -1897,6 +1897,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;
                }