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.carpen...@oracle.com>
Signed-off-by: Daniel Lezcano <daniel.lezc...@linaro.org>
---
 drivers/thermal/cpuidle_cooling.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/thermal/cpuidle_cooling.c 
b/drivers/thermal/cpuidle_cooling.c
index f32976163bad..4f41102e8b16 100644
--- a/drivers/thermal/cpuidle_cooling.c
+++ b/drivers/thermal/cpuidle_cooling.c
@@ -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:
-- 
2.25.1

Reply via email to