diff options
author | Ilkka Koskinen <ilkka.koskinen@linux.intel.com> | 2014-12-09 15:34:03 -0500 |
---|---|---|
committer | Zhang Rui <rui.zhang@intel.com> | 2014-12-21 08:27:25 -0500 |
commit | 7b09406390e76df97c9f5f29c23a4f56d982f22c (patch) | |
tree | 722e857992e1459ace48e01f2046a7f1c8685ce9 | |
parent | 97bf6af1f928216fd6c5a66e8a57bfa95a659672 (diff) |
Thermal/int340x: Handle properly the case when _trt or _art acpi entry is missing
If either of the entries was missing, the driver tried to free memory
using uninitialized pointer. In addition, it was dereferencing null
pointer.
Signed-off-by: Ilkka Koskinen <ilkka.koskinen@linux.intel.com>
Acked-by: Jacob Pan <jacob.jun.pan@linux.intel.com>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
-rw-r--r-- | drivers/thermal/int340x_thermal/acpi_thermal_rel.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/thermal/int340x_thermal/acpi_thermal_rel.c b/drivers/thermal/int340x_thermal/acpi_thermal_rel.c index e4e61b3fb11e..231cabc16e16 100644 --- a/drivers/thermal/int340x_thermal/acpi_thermal_rel.c +++ b/drivers/thermal/int340x_thermal/acpi_thermal_rel.c | |||
@@ -82,7 +82,7 @@ int acpi_parse_trt(acpi_handle handle, int *trt_count, struct trt **trtp, | |||
82 | struct acpi_buffer trt_format = { sizeof("RRNNNNNN"), "RRNNNNNN" }; | 82 | struct acpi_buffer trt_format = { sizeof("RRNNNNNN"), "RRNNNNNN" }; |
83 | 83 | ||
84 | if (!acpi_has_method(handle, "_TRT")) | 84 | if (!acpi_has_method(handle, "_TRT")) |
85 | return 0; | 85 | return -ENODEV; |
86 | 86 | ||
87 | status = acpi_evaluate_object(handle, "_TRT", NULL, &buffer); | 87 | status = acpi_evaluate_object(handle, "_TRT", NULL, &buffer); |
88 | if (ACPI_FAILURE(status)) | 88 | if (ACPI_FAILURE(status)) |
@@ -167,7 +167,7 @@ int acpi_parse_art(acpi_handle handle, int *art_count, struct art **artp, | |||
167 | sizeof("RRNNNNNNNNNNN"), "RRNNNNNNNNNNN" }; | 167 | sizeof("RRNNNNNNNNNNN"), "RRNNNNNNNNNNN" }; |
168 | 168 | ||
169 | if (!acpi_has_method(handle, "_ART")) | 169 | if (!acpi_has_method(handle, "_ART")) |
170 | return 0; | 170 | return -ENODEV; |
171 | 171 | ||
172 | status = acpi_evaluate_object(handle, "_ART", NULL, &buffer); | 172 | status = acpi_evaluate_object(handle, "_ART", NULL, &buffer); |
173 | if (ACPI_FAILURE(status)) | 173 | if (ACPI_FAILURE(status)) |
@@ -321,8 +321,8 @@ static long acpi_thermal_rel_ioctl(struct file *f, unsigned int cmd, | |||
321 | unsigned long length = 0; | 321 | unsigned long length = 0; |
322 | int count = 0; | 322 | int count = 0; |
323 | char __user *arg = (void __user *)__arg; | 323 | char __user *arg = (void __user *)__arg; |
324 | struct trt *trts; | 324 | struct trt *trts = NULL; |
325 | struct art *arts; | 325 | struct art *arts = NULL; |
326 | 326 | ||
327 | switch (cmd) { | 327 | switch (cmd) { |
328 | case ACPI_THERMAL_GET_TRT_COUNT: | 328 | case ACPI_THERMAL_GET_TRT_COUNT: |