thermal/drivers/cpuidle_cooling: Fix use after error
authorDaniel Lezcano <daniel.lezcano@linaro.org>
Fri, 19 Mar 2021 20:25:22 +0000 (21:25 +0100)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Thu, 15 Apr 2021 11:21:26 +0000 (13:21 +0200)
When the function successfully finishes it logs an information about
the registration of the cooling device and use its name to build the
message. Unfortunately it was freed right before:

drivers/thermal/cpuidle_cooling.c:218 __cpuidle_cooling_register()
warn: 'name' was already freed.

Fix this by freeing after the message happened.

Fixes: 6fd1b186d900 ("thermal/drivers/cpuidle_cooling: Use device name instead of auto-numbering")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Link: https://lore.kernel.org/r/20210319202522.891061-1-daniel.lezcano@linaro.org
drivers/thermal/cpuidle_cooling.c

index f329761..4f41102 100644 (file)
@@ -208,18 +208,20 @@ static int __cpuidle_cooling_register(struct device_node *np,
 
        cdev = thermal_of_cooling_device_register(np, name, idle_cdev,
                                                  &cpuidle_cooling_ops);
-       kfree(name);
-
        if (IS_ERR(cdev)) {
                ret = PTR_ERR(cdev);
-               goto out_unregister;
+               goto out_kfree_name;
        }
 
        pr_debug("%s: Idle injection set with idle duration=%u, latency=%u\n",
                 name, idle_duration_us, latency_us);
 
+       kfree(name);
+
        return 0;
 
+out_kfree_name:
+       kfree(name);
 out_unregister:
        idle_inject_unregister(ii_dev);
 out_kfree: