2007-11-19 08:37:45

by Rolf Eike Beer

[permalink] [raw]
Subject: [PATCH] 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.

Signed-off-by: Rolf Eike Beer <[email protected]>

diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
index 192c244..2e8e790 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -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);


Attachments:
(No filename) (981.00 B)
signature.asc (194.00 B)
This is a digitally signed message part.
Download all attachments

2007-11-19 09:45:29

by Alexey Starikovskiy

[permalink] [raw]
Subject: Re: [PATCH] Fix segfault when printing battery status


Rolf Eike Beer wrote:
> 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.
>
> Signed-off-by: Rolf Eike Beer <[email protected]>
>
Rolf, thanks for remainding.
Acked again,
Alex.

2007-11-19 10:29:53

by Rolf Eike Beer

[permalink] [raw]
Subject: Re: [PATCH] Fix segfault when printing battery status

Alexey Starikovskiy wrote:
> Rolf Eike Beer wrote:
> > 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.
> >
> > Signed-off-by: Rolf Eike Beer <[email protected]>
>
> Rolf, thanks for remainding.

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

Eike


Attachments:
(No filename) (679.00 B)
signature.asc (194.00 B)
This is a digitally signed message part.
Download all attachments

2007-11-19 11:09:35

by Alexey Starikovskiy

[permalink] [raw]
Subject: Re: [PATCH] Fix segfault when printing battery status

Rolf Eike Beer wrote:
> Alexey Starikovskiy wrote:
>
>> Rolf Eike Beer wrote:
>>
>>> 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.
>>>
>>> Signed-off-by: Rolf Eike Beer <[email protected]>
>>>
>> 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.

2007-11-26 22:26:19

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] Fix segfault when printing battery status

On Mon, 19 Nov 2007 14:09:51 +0300
Alexey Starikovskiy <[email protected]> wrote:

> Rolf Eike Beer wrote:
> > Alexey Starikovskiy wrote:
> >
> >> Rolf Eike Beer wrote:
> >>
> >>> 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.
> >>>
> >>> Signed-off-by: Rolf Eike Beer <[email protected]>
> >>>
> >> 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...
>

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