Commit d5bce867 authored by Srinivas Pandruvada's avatar Srinivas Pandruvada Committed by Eduardo Valentin

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: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: default avatarEduardo Valentin <edubezval@gmail.com>
parent 78045bfe
...@@ -208,7 +208,7 @@ struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev, ...@@ -208,7 +208,7 @@ struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev,
trip_cnt, GFP_KERNEL); trip_cnt, GFP_KERNEL);
if (!int34x_thermal_zone->aux_trips) { if (!int34x_thermal_zone->aux_trips) {
ret = -ENOMEM; ret = -ENOMEM;
goto free_mem; goto err_trip_alloc;
} }
trip_mask = BIT(trip_cnt) - 1; trip_mask = BIT(trip_cnt) - 1;
int34x_thermal_zone->aux_trip_nr = trip_cnt; 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,14 +248,15 @@ struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev,
0, 0); 0, 0);
if (IS_ERR(int34x_thermal_zone->zone)) { if (IS_ERR(int34x_thermal_zone->zone)) {
ret = PTR_ERR(int34x_thermal_zone->zone); ret = PTR_ERR(int34x_thermal_zone->zone);
goto free_lpat; goto err_thermal_zone;
} }
return int34x_thermal_zone; return int34x_thermal_zone;
free_lpat: err_thermal_zone:
acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table); acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table);
free_mem: kfree(int34x_thermal_zone->aux_trips);
err_trip_alloc:
kfree(int34x_thermal_zone); kfree(int34x_thermal_zone);
return ERR_PTR(ret); return ERR_PTR(ret);
} }
...@@ -266,6 +267,7 @@ void int340x_thermal_zone_remove(struct int34x_thermal_zone ...@@ -266,6 +267,7 @@ void int340x_thermal_zone_remove(struct int34x_thermal_zone
{ {
thermal_zone_device_unregister(int34x_thermal_zone->zone); thermal_zone_device_unregister(int34x_thermal_zone->zone);
acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table); acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table);
kfree(int34x_thermal_zone->aux_trips);
kfree(int34x_thermal_zone); kfree(int34x_thermal_zone);
} }
EXPORT_SYMBOL_GPL(int340x_thermal_zone_remove); EXPORT_SYMBOL_GPL(int340x_thermal_zone_remove);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment