ACPI: thinkpad-acpi: fix LED handling on older ThinkPads
commitd28014f8e27f6681418c30ab555a1555cf057b4a
authorHenrique de Moraes Holschuh <hmh@hmh.eng.br>
Sat, 31 May 2008 17:41:05 +0000 (31 14:41 -0300)
committerHenrique de Moraes Holschuh <hmh@hmh.eng.br>
Sat, 31 May 2008 17:41:05 +0000 (31 14:41 -0300)
treeae68686332e0afea566c4de1bb1f0ae8b5e4c1e6
parent56200904d351669e8fa61a2b9cce99449591fa5d
ACPI: thinkpad-acpi: fix LED handling on older ThinkPads

The less tested codepaths for LED handling, used on ThinkPads 570, 600e/x,
770e, 770x, A21e, A2xm/p, T20-22, X20 and maybe a few others, would write
data to kernel memory it had no business touching, for leds number 3 and
above.  If one is lucky, that illegal write would cause an OOPS, but
chances are it would silently corrupt a byte.

The problem was introduced in commit af116101, "ACPI: thinkpad-acpi: add
sysfs led class support to thinkpad leds (v3.2)".

Fix the bug by refactoring the entire code to be far more obvious on what
it wants to do.  Also do some defensive "constification".

Issue reported by Karol Lewandowski <lmctlx@gmail.com> (he's an lucky guy
and got an OOPS instead of silent corruption :-) ).

Root cause of the OOPS identified by Adrian Bunk <bunk@kernel.org>.
Thanks, Adrian!

Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Cc: Karol Lewandowski <lmctlx@gmail.com>
Cc: Adrian Bunk <bunk@kernel.org>
drivers/misc/thinkpad_acpi.c