coresight: platform: Fix leaking device reference
authorSuzuki K Poulose <suzuki.poulose@arm.com>
Thu, 20 Sep 2018 19:17:39 +0000 (13:17 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 25 Sep 2018 18:09:17 +0000 (20:09 +0200)
We don't drop the reference on the remote device while parsing the
connection, held by bus_find_device(). Fix this by duplicating the
device name and dropping the reference.

Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Kim Phillips <kim.phillips@arm.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hwtracing/coresight/of_coresight.c

index 28d3aef1660b4d787910d4dcdca540ebbbcc6b9f..4b279f8fea0c88d1150ba3655cd87c9980edf9b7 100644 (file)
@@ -162,7 +162,9 @@ static int of_coresight_parse_endpoint(struct device *dev,
                }
 
                pdata->outports[i] = endpoint.port;
-               pdata->child_names[i] = dev_name(rdev);
+               pdata->child_names[i] = devm_kstrdup(dev,
+                                                    dev_name(rdev),
+                                                    GFP_KERNEL);
                pdata->child_ports[i] = rendpoint.id;
                /* Connection record updated */
                ret = 1;
@@ -172,6 +174,8 @@ static int of_coresight_parse_endpoint(struct device *dev,
                of_node_put(rparent);
        if (rport)
                of_node_put(rport);
+       if (rdev)
+               put_device(rdev);
 
        return ret;
 }