diff options
author | Frans Klaver <fransklaver@gmail.com> | 2014-09-17 17:47:26 -0400 |
---|---|---|
committer | Darren Hart <dvhart@linux.intel.com> | 2014-09-19 12:42:11 -0400 |
commit | a5c155b16f4c170d96d41fc6066f245f2d53604d (patch) | |
tree | 9dee97f27ca749bb850a8766a85e577df22655c0 | |
parent | 48d4a5b29c8d0cf544ffe96f5855452446b6f20d (diff) |
eeepc-laptop: check proper return values in get_cpufv
In get_cpufv the return value of get_acpi is stored in the cpufv struct.
Right before this value is checked for errors, it is and'ed with 0xff.
This means c->cur can never be less than zero. Besides that, the actual
error value is ignored.
c->num is also and'ed with 0xff, which means we can ignore values below
zero.
Check the result of get_acpi() right away. While at it, propagate the
error if we got one.
Signed-off-by: Frans Klaver <fransklaver@gmail.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
-rw-r--r-- | drivers/platform/x86/eeepc-laptop.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/platform/x86/eeepc-laptop.c b/drivers/platform/x86/eeepc-laptop.c index e93a54edb17a..875a43fcaa86 100644 --- a/drivers/platform/x86/eeepc-laptop.c +++ b/drivers/platform/x86/eeepc-laptop.c | |||
@@ -332,9 +332,12 @@ struct eeepc_cpufv { | |||
332 | static int get_cpufv(struct eeepc_laptop *eeepc, struct eeepc_cpufv *c) | 332 | static int get_cpufv(struct eeepc_laptop *eeepc, struct eeepc_cpufv *c) |
333 | { | 333 | { |
334 | c->cur = get_acpi(eeepc, CM_ASL_CPUFV); | 334 | c->cur = get_acpi(eeepc, CM_ASL_CPUFV); |
335 | if (c->cur < 0) | ||
336 | return -ENODEV; | ||
337 | |||
335 | c->num = (c->cur >> 8) & 0xff; | 338 | c->num = (c->cur >> 8) & 0xff; |
336 | c->cur &= 0xff; | 339 | c->cur &= 0xff; |
337 | if (c->cur < 0 || c->num <= 0 || c->num > 12) | 340 | if (c->num == 0 || c->num > 12) |
338 | return -ENODEV; | 341 | return -ENODEV; |
339 | return 0; | 342 | return 0; |
340 | } | 343 | } |