thunderbolt: Fix to check return value of ida_simple_get
authorAditya Pakki <pakki001@umn.edu>
Wed, 20 Mar 2019 16:34:09 +0000 (11:34 -0500)
committerMika Westerberg <mika.westerberg@linux.intel.com>
Fri, 22 Mar 2019 10:26:01 +0000 (13:26 +0300)
In enumerate_services, ida_simple_get on failure can return an error and
leaks memory. The patch ensures that the dev_set_name is set on non
failure cases, and releases memory during failure.

Signed-off-by: Aditya Pakki <pakki001@umn.edu>
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
drivers/thunderbolt/xdomain.c

index e27dd8beb94be4a9690b4fcaab00e93996a3c82f..e0642dcb8b9bda3a3e5e8d3f2d8bcf8bc97f432f 100644 (file)
@@ -740,6 +740,7 @@ static void enumerate_services(struct tb_xdomain *xd)
        struct tb_service *svc;
        struct tb_property *p;
        struct device *dev;
+       int id;
 
        /*
         * First remove all services that are not available anymore in
@@ -768,7 +769,12 @@ static void enumerate_services(struct tb_xdomain *xd)
                        break;
                }
 
-               svc->id = ida_simple_get(&xd->service_ids, 0, 0, GFP_KERNEL);
+               id = ida_simple_get(&xd->service_ids, 0, 0, GFP_KERNEL);
+               if (id < 0) {
+                       kfree(svc);
+                       break;
+               }
+               svc->id = id;
                svc->dev.bus = &tb_bus_type;
                svc->dev.type = &tb_service_type;
                svc->dev.parent = &xd->dev;