Skip to contentSkip to conversation

Fix segfault when printing battery status

PATCH In review Rolf Eike Beer 3 participants 5 messages Nov 19, 2007 – Nov 26, 2007 ACPI

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Fix segfault when printing battery status

cat /sys/devices/LNXSYSTM:00/device:00/PNP0A08:00/device:19/PNP0C0A:00/power_supply/BAT1/status

This leads to a stacktrace as acpi_battery_get_property() returns 0 for a case where it does not set val->intval. These value is used as an array index in drivers/power/power_supply_sysfs.c::power_supply_show_property(). I had a situation where the value was 4096 which caused a problem as the array only has 5 entries.

drivers/acpi/battery.c +2 -0
index 192c244..2e8e790 100644
@@ -153,6 +153,8 @@ static int acpi_battery_get_property(struct power_supply *psy,
 			val->intval = POWER_SUPPLY_STATUS_CHARGING;
 		else if (battery->state == 0)
 			val->intval = POWER_SUPPLY_STATUS_FULL;
+		else
+			val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
 		break;
 	case POWER_SUPPLY_PROP_PRESENT:
 		val->intval = acpi_battery_present(battery);
#1 lore raw
Quoted 6 lines · Rolf Eike Beer

cat /sys/devices/LNXSYSTM:00/device:00/PNP0A08:00/device:19/PNP0C0A:00/power_supply/BAT1/status

This leads to a stacktrace as acpi_battery_get_property() returns 0 for a case where it does not set val->intval. These value is used as an array index in drivers/power/power_supply_sysfs.c::power_supply_show_property(). I had a situation where the value was 4096 which caused a problem as the array only has 5 entries.

Rolf, thanks for remainding.
Acked again,
Alex.

#2 lore raw
Quoted 12 lines · Alexey Starikovskiy
Quoted 11 lines · Rolf Eike Beer

cat /sys/devices/LNXSYSTM:00/device:00/PNP0A08:00/device:19/PNP0C0A:00/power_ supply/BAT1/status

This leads to a stacktrace as acpi_battery_get_property() returns 0 for a case where it does not set val->intval. These value is used as an array index in drivers/power/power_supply_sysfs.c::power_supply_show_property(). I had a situation where the value was 4096 which caused a problem as the array only has 5 entries.

Quoted 3 lines
Quoted 1 line

Rolf, thanks for remainding.

Huh? This one is unrelated to the problem I reported two weeks ago...

Eike

#3 lore raw
Quoted 15 lines · Rolf Eike Beer
Quoted 13 lines · Alexey Starikovskiy
Quoted 11 lines · Rolf Eike Beer

cat /sys/devices/LNXSYSTM:00/device:00/PNP0A08:00/device:19/PNP0C0A:00/power_ supply/BAT1/status

This leads to a stacktrace as acpi_battery_get_property() returns 0 for a case where it does not set val->intval. These value is used as an array index in drivers/power/power_supply_sysfs.c::power_supply_show_property(). I had a situation where the value was 4096 which caused a problem as the array only has 5 entries.

Quoted 9 lines
Quoted 4 lines
Quoted 2 lines

Rolf, thanks for remainding.

Huh? This one is unrelated to the problem I reported two weeks ago...

Eike

You are second to send the same patch, first one I already acked. But it seems that Len did not pick it up yet.
Look for "ACPI: Always return valid 'status' from acpi_battery_get_property()" if interested...

Regards,
Alex.

#4 lore raw
Quoted 23 lines · On Mon, 19 Nov 2007 14:09:51 +0300 Alexey Starikovskiy <[email protected]>…
Quoted 22 lines · Rolf Eike Beer
Quoted 13 lines · Alexey Starikovskiy
Quoted 11 lines · Rolf Eike Beer

cat /sys/devices/LNXSYSTM:00/device:00/PNP0A08:00/device:19/PNP0C0A:00/power_ supply/BAT1/status

This leads to a stacktrace as acpi_battery_get_property() returns 0 for a case where it does not set val->intval. These value is used as an array index in drivers/power/power_supply_sysfs.c::power_supply_show_property(). I had a situation where the value was 4096 which caused a problem as the array only has 5 entries.

Quoted 4 lines
Quoted 2 lines

Rolf, thanks for remainding.

Huh? This one is unrelated to the problem I reported two weeks ago...

Quoted 8 lines
Quoted 2 lines

Eike

You are second to send the same patch, first one I already acked. But it seems that Len did not pick it up yet.
Look for "ACPI: Always return valid 'status' from acpi_battery_get_property()"
if interested...

This fix is in Len's tree and was in his 2.6.24-rc3 pull request to Linus.