diff mbox

[2/2] Thermal/int340x: Handle properly the case when _trt or _art acpi entry is missing

Message ID 1418090492-87508-3-git-send-email-ilkka.koskinen@linux.intel.com (mailing list archive)
State Changes Requested
Delegated to: Zhang Rui
Headers show

Commit Message

Ilkka Koskinen Dec. 9, 2014, 2:01 a.m. UTC
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>
---
 drivers/thermal/int340x_thermal/acpi_thermal_rel.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Comments

Zhang, Rui Dec. 9, 2014, 3:48 a.m. UTC | #1
On Mon, 2014-12-08 at 18:01 -0800, Ilkka Koskinen wrote:
> 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>
> ---
>  drivers/thermal/int340x_thermal/acpi_thermal_rel.c | 8 ++++----
>  1 file 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 e4e61b3..ee4ed3b 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,
>  	struct acpi_buffer trt_format = { sizeof("RRNNNNNN"), "RRNNNNNN" };
>  
>  	if (!acpi_has_method(handle, "_TRT"))
> -		return 0;
> +		return -EEXIST;
>  
If the control method does not exist, shouldn't we return -ENODEV or
-ENOENT instead?

thanks,
rui
>  	status = acpi_evaluate_object(handle, "_TRT", NULL, &buffer);
>  	if (ACPI_FAILURE(status))
> @@ -167,7 +167,7 @@ int acpi_parse_art(acpi_handle handle, int *art_count, struct art **artp,
>  		sizeof("RRNNNNNNNNNNN"), "RRNNNNNNNNNNN" };
>  
>  	if (!acpi_has_method(handle, "_ART"))
> -		return 0;
> +		return -EEXIST;
>  
>  	status = acpi_evaluate_object(handle, "_ART", NULL, &buffer);
>  	if (ACPI_FAILURE(status))
> @@ -321,8 +321,8 @@ static long acpi_thermal_rel_ioctl(struct file *f, unsigned int cmd,
>  	unsigned long length = 0;
>  	int count = 0;
>  	char __user *arg = (void __user *)__arg;
> -	struct trt *trts;
> -	struct art *arts;
> +	struct trt *trts = NULL;
> +	struct art *arts = NULL;
>  
>  	switch (cmd) {
>  	case ACPI_THERMAL_GET_TRT_COUNT:


--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ilkka Koskinen Dec. 9, 2014, 8:26 p.m. UTC | #2
On Mon, December 8, 2014 19:48, Zhang Rui wrote:
> On Mon, 2014-12-08 at 18:01 -0800, Ilkka Koskinen wrote:
>> 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>
>> ---
>>  drivers/thermal/int340x_thermal/acpi_thermal_rel.c | 8 ++++----
>>  1 file 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 e4e61b3..ee4ed3b 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,
>>  	struct acpi_buffer trt_format = { sizeof("RRNNNNNN"), "RRNNNNNN" };
>>
>>  	if (!acpi_has_method(handle, "_TRT"))
>> -		return 0;
>> +		return -EEXIST;
>>
> If the control method does not exist, shouldn't we return -ENODEV or
> -ENOENT instead?

Absolutely! I wonder why I had chosen that one. I change them
to -ENODEV and submit a new version of this patch.

Cheers, Ilkka

> thanks,
> rui

--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/thermal/int340x_thermal/acpi_thermal_rel.c b/drivers/thermal/int340x_thermal/acpi_thermal_rel.c
index e4e61b3..ee4ed3b 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,
 	struct acpi_buffer trt_format = { sizeof("RRNNNNNN"), "RRNNNNNN" };
 
 	if (!acpi_has_method(handle, "_TRT"))
-		return 0;
+		return -EEXIST;
 
 	status = acpi_evaluate_object(handle, "_TRT", NULL, &buffer);
 	if (ACPI_FAILURE(status))
@@ -167,7 +167,7 @@  int acpi_parse_art(acpi_handle handle, int *art_count, struct art **artp,
 		sizeof("RRNNNNNNNNNNN"), "RRNNNNNNNNNNN" };
 
 	if (!acpi_has_method(handle, "_ART"))
-		return 0;
+		return -EEXIST;
 
 	status = acpi_evaluate_object(handle, "_ART", NULL, &buffer);
 	if (ACPI_FAILURE(status))
@@ -321,8 +321,8 @@  static long acpi_thermal_rel_ioctl(struct file *f, unsigned int cmd,
 	unsigned long length = 0;
 	int count = 0;
 	char __user *arg = (void __user *)__arg;
-	struct trt *trts;
-	struct art *arts;
+	struct trt *trts = NULL;
+	struct art *arts = NULL;
 
 	switch (cmd) {
 	case ACPI_THERMAL_GET_TRT_COUNT: