diff options
author | Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> | 2015-03-02 16:12:07 -0500 |
---|---|---|
committer | Eduardo Valentin <edubezval@gmail.com> | 2015-03-05 00:41:51 -0500 |
commit | d5bce867778c8cb5ff655efe47fecb4b31f30406 (patch) | |
tree | bb13e8227c54ca1d747e639f9ab05eed12cce170 /drivers/thermal | |
parent | 78045bfe85c7c3a9ae76bd330bb261eefff9ea57 (diff) |
Thermal/int340x: Fix memleak for aux trip
When thermal zone device register fails or on module exit, the memory
for aux_trip is not freed. This change fixes this issue.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
Diffstat (limited to 'drivers/thermal')
-rw-r--r-- | drivers/thermal/int340x_thermal/int340x_thermal_zone.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/thermal/int340x_thermal/int340x_thermal_zone.c b/drivers/thermal/int340x_thermal/int340x_thermal_zone.c index f88b08877025..1e25133d35e2 100644 --- a/drivers/thermal/int340x_thermal/int340x_thermal_zone.c +++ b/drivers/thermal/int340x_thermal/int340x_thermal_zone.c | |||
@@ -208,7 +208,7 @@ struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev, | |||
208 | trip_cnt, GFP_KERNEL); | 208 | trip_cnt, GFP_KERNEL); |
209 | if (!int34x_thermal_zone->aux_trips) { | 209 | if (!int34x_thermal_zone->aux_trips) { |
210 | ret = -ENOMEM; | 210 | ret = -ENOMEM; |
211 | goto free_mem; | 211 | goto err_trip_alloc; |
212 | } | 212 | } |
213 | trip_mask = BIT(trip_cnt) - 1; | 213 | trip_mask = BIT(trip_cnt) - 1; |
214 | int34x_thermal_zone->aux_trip_nr = trip_cnt; | 214 | int34x_thermal_zone->aux_trip_nr = trip_cnt; |
@@ -248,14 +248,15 @@ struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev, | |||
248 | 0, 0); | 248 | 0, 0); |
249 | if (IS_ERR(int34x_thermal_zone->zone)) { | 249 | if (IS_ERR(int34x_thermal_zone->zone)) { |
250 | ret = PTR_ERR(int34x_thermal_zone->zone); | 250 | ret = PTR_ERR(int34x_thermal_zone->zone); |
251 | goto free_lpat; | 251 | goto err_thermal_zone; |
252 | } | 252 | } |
253 | 253 | ||
254 | return int34x_thermal_zone; | 254 | return int34x_thermal_zone; |
255 | 255 | ||
256 | free_lpat: | 256 | err_thermal_zone: |
257 | acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table); | 257 | acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table); |
258 | free_mem: | 258 | kfree(int34x_thermal_zone->aux_trips); |
259 | err_trip_alloc: | ||
259 | kfree(int34x_thermal_zone); | 260 | kfree(int34x_thermal_zone); |
260 | return ERR_PTR(ret); | 261 | return ERR_PTR(ret); |
261 | } | 262 | } |
@@ -266,6 +267,7 @@ void int340x_thermal_zone_remove(struct int34x_thermal_zone | |||
266 | { | 267 | { |
267 | thermal_zone_device_unregister(int34x_thermal_zone->zone); | 268 | thermal_zone_device_unregister(int34x_thermal_zone->zone); |
268 | acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table); | 269 | acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table); |
270 | kfree(int34x_thermal_zone->aux_trips); | ||
269 | kfree(int34x_thermal_zone); | 271 | kfree(int34x_thermal_zone); |
270 | } | 272 | } |
271 | EXPORT_SYMBOL_GPL(int340x_thermal_zone_remove); | 273 | EXPORT_SYMBOL_GPL(int340x_thermal_zone_remove); |