aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bresticker <abrestic@chromium.org>2013-08-13 13:39:48 -0700
committermyfluxi <linflux@arcor.de>2015-04-26 14:31:09 +0200
commit6b77e0fbe8e568bb8366951908499f6d309e2e95 (patch)
tree7e8edfa720ed845486c84e7d9821a6f6bbd9d4a9
parentc22bb66c16d3150aa56cb7f5c54f6e42c76701f5 (diff)
CHROMIUM: cpufreq: interactive: validate above_hispeed_delay
We rely on the frequencies in above_hispeed_delay being in ascending order. Ensure that is the case for the values the user gives us. BUG=chrome-os-partner:20830 TEST=Boot Pit; write invalid above_hispeed_delay value: localhost ~ # echo "20000 1800000:20000 700000:0" > above_hispeed_delay -bash: echo: write error: Invalid argument Change-Id: Ifb431e58ad4b6b371152d7b09fcbefa127b0cbe2 Signed-off-by: Andrew Bresticker <abrestic@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/65742 Reviewed-by: Sonny Rao <sonnyrao@chromium.org>
-rw-r--r--drivers/cpufreq/cpufreq_interactive.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/cpufreq/cpufreq_interactive.c b/drivers/cpufreq/cpufreq_interactive.c
index d39832f0732..17520487bf9 100644
--- a/drivers/cpufreq/cpufreq_interactive.c
+++ b/drivers/cpufreq/cpufreq_interactive.c
@@ -828,7 +828,7 @@ static ssize_t store_above_hispeed_delay(
struct kobject *kobj, struct attribute *attr, const char *buf,
size_t count)
{
- int ntokens;
+ int ntokens, i;
unsigned int *new_above_hispeed_delay = NULL;
unsigned long flags;
@@ -836,6 +836,15 @@ static ssize_t store_above_hispeed_delay(
if (IS_ERR(new_above_hispeed_delay))
return PTR_RET(new_above_hispeed_delay);
+ /* Make sure frequencies are in ascending order. */
+ for (i = 3; i < ntokens; i += 2) {
+ if (new_above_hispeed_delay[i] <=
+ new_above_hispeed_delay[i - 2]) {
+ kfree(new_above_hispeed_delay);
+ return -EINVAL;
+ }
+ }
+
spin_lock_irqsave(&above_hispeed_delay_lock, flags);
if (above_hispeed_delay != default_above_hispeed_delay)
kfree(above_hispeed_delay);