Skip to contentSkip to conversation

sony-laptop: potential null dereference

PATCH Applied Dan Carpenter 2 participants 4 messages Feb 26, 2011 – Feb 27, 2011

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 4/4 sony-laptop: potential null dereference

In the original code, if "device_enum" was NULL then it would dereference it when it printed the error message.

drivers/platform/x86/sony-laptop.c +5 -1
index 0db9049..c24aa4a 100644
@@ -1311,7 +1311,11 @@ static void sony_nc_rfkill_setup(struct acpi_device *device)
 	}
 
 	device_enum = (union acpi_object *) buffer.pointer;
-	if (!device_enum || device_enum->type != ACPI_TYPE_BUFFER) {
+	if (!device_enum) {
+		pr_err(DRV_PFX "Invalid SN06 return object.");
+		goto out_no_enum;
+	}
+	if (device_enum->type != ACPI_TYPE_BUFFER) {
 		pr_err(DRV_PFX "Invalid SN06 return object 0x%.2x\n",
 				device_enum->type);
 		goto out_no_enum;
maintainer
#1 lore raw
Quoted 2 lines · Dan Carpenter

In the original code, if "device_enum" was NULL then it would dereference it when it printed the error message.

Yup, this and the others are actual bugs, thanks for reviewing the code.

drivers/platform/x86/sony-laptop.c static void sony_nc_rfkill_setup(struct acpi_device *device) · line 1315

Quoted 13 lines
drivers/platform/x86/sony-laptop.c +2 -1
index 0db9049..c24aa4a 100644
@@ -1311,7 +1311,11 @@ static void sony_nc_rfkill_setup(struct acpi_device *device)
 	}
 
 	device_enum = (union acpi_object *) buffer.pointer;
-	if (!device_enum || device_enum->type != ACPI_TYPE_BUFFER) {
+	if (!device_enum) {
+		pr_err(DRV_PFX "Invalid SN06 return object.");

Just a nitpick but I'd say there was no return object at all. ;)

Signature · 2 lines
mattia
:wq!
#2 lore raw

PATCH v2 4/4 sony-laptop: potential null dereference

In the original code, if "device_enum" was NULL then it would dereference it when it printed the error message.

---
v2: Fixed the error message.

drivers/platform/x86/sony-laptop.c +5 -1
index 0db9049..c24aa4a 100644
@@ -1311,7 +1311,11 @@ static void sony_nc_rfkill_setup(struct acpi_device *device)
 	}
 
 	device_enum = (union acpi_object *) buffer.pointer;
-	if (!device_enum || device_enum->type != ACPI_TYPE_BUFFER) {
+	if (!device_enum) {
+		pr_err(DRV_PFX "No SN06 return object.");
+		goto out_no_enum;
+	}
+	if (device_enum->type != ACPI_TYPE_BUFFER) {
 		pr_err(DRV_PFX "Invalid SN06 return object 0x%.2x\n",
 				device_enum->type);
 		goto out_no_enum;
maintainer Acked-by on v2 4/4
#3 lore raw

Hi Matthew,

could you pick this and the other 3 up for next?

Thanks!

Quoted 4 lines · Dan Carpenter

In the original code, if "device_enum" was NULL then it would dereference it when it printed the error message.

Quoted 21 lines

---
v2: Fixed the error message.

drivers/platform/x86/sony-laptop.c +5 -1
index 0db9049..c24aa4a 100644
@@ -1311,7 +1311,11 @@ static void sony_nc_rfkill_setup(struct acpi_device *device)
 	}
 
 	device_enum = (union acpi_object *) buffer.pointer;
-	if (!device_enum || device_enum->type != ACPI_TYPE_BUFFER) {
+	if (!device_enum) {
+		pr_err(DRV_PFX "No SN06 return object.");
+		goto out_no_enum;
+	}
+	if (device_enum->type != ACPI_TYPE_BUFFER) {
 		pr_err(DRV_PFX "Invalid SN06 return object 0x%.2x\n",
 				device_enum->type);
 		goto out_no_enum;
Signature · 2 lines
mattia
:wq!