PM / devfreq: Strengthen check for freq_table
authorSamuel Holland <samuel@sholland.org>
Wed, 29 Sep 2021 04:42:45 +0000 (23:42 -0500)
committerChanwoo Choi <cw00.choi@samsung.com>
Wed, 27 Oct 2021 05:22:12 +0000 (14:22 +0900)
Since commit ea572f816032 ("PM / devfreq: Change return type of
devfreq_set_freq_table()"), all devfreq devices are expected to have a
valid freq_table. The devfreq core unconditionally dereferences
freq_table in the sysfs code and in get_freq_range().

Therefore, we need to ensure that freq_table is both non-null and
non-empty (length is > 0). If either check fails, replace the table
using set_freq_table() or return the error.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
drivers/devfreq/devfreq.c

index 85faa7a..06333d4 100644 (file)
@@ -827,7 +827,7 @@ struct devfreq *devfreq_add_device(struct device *dev,
                goto err_dev;
        }
 
-       if (!devfreq->profile->max_state && !devfreq->profile->freq_table) {
+       if (!devfreq->profile->max_state || !devfreq->profile->freq_table) {
                mutex_unlock(&devfreq->lock);
                err = set_freq_table(devfreq);
                if (err < 0)