diff options
| author | Andrew Bresticker <abrestic@chromium.org> | 2013-08-13 13:39:48 -0700 |
|---|---|---|
| committer | myfluxi <linflux@arcor.de> | 2015-04-26 14:31:09 +0200 |
| commit | 6b77e0fbe8e568bb8366951908499f6d309e2e95 (patch) | |
| tree | 7e8edfa720ed845486c84e7d9821a6f6bbd9d4a9 | |
| parent | c22bb66c16d3150aa56cb7f5c54f6e42c76701f5 (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.c | 11 |
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); |
