* [PATCH] thermal/drivers/core: Use put_device() if device_register() fails
@ 2019-08-02 6:55 Yue Hu
0 siblings, 0 replies; only message in thread
From: Yue Hu @ 2019-08-02 6:55 UTC (permalink / raw)
To: rui.zhang, edubezval, daniel.lezcano; +Cc: linux-pm, huyue2, zhangwen
From: Yue Hu <huyue2@yulong.com>
Never directly free @dev after calling device_register(), even if it
returned an error! Always use put_device() to give up the reference
initialized.
Signed-off-by: Yue Hu <huyue2@yulong.com>
---
drivers/thermal/thermal_core.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 6bab66e..ffe5d8e 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -985,7 +985,7 @@ static void bind_cdev(struct thermal_cooling_device *cdev)
result = device_register(&cdev->device);
if (result) {
ida_simple_remove(&thermal_cdev_ida, cdev->id);
- kfree(cdev);
+ put_device(&cdev->device);
return ERR_PTR(result);
}
@@ -1292,7 +1292,7 @@ struct thermal_zone_device *
dev_set_name(&tz->device, "thermal_zone%d", tz->id);
result = device_register(&tz->device);
if (result)
- goto remove_device_groups;
+ goto release_device;
for (count = 0; count < trips; count++) {
if (tz->ops->get_trip_type(tz, count, &trip_type))
@@ -1347,8 +1347,11 @@ struct thermal_zone_device *
device_unregister(&tz->device);
return ERR_PTR(result);
-remove_device_groups:
- thermal_zone_destroy_device_groups(tz);
+release_device:
+ ida_simple_remove(&thermal_tz_ida, tz->id);
+ put_device(&tz->device);
+ return ERR_PTR(result);
+
remove_id:
ida_simple_remove(&thermal_tz_ida, tz->id);
free_tz:
--
1.9.1
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2019-08-02 6:55 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-02 6:55 [PATCH] thermal/drivers/core: Use put_device() if device_register() fails Yue Hu
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.