Message ID | 20240826133842.5519-1-abelova@astralinux.ru (mailing list archive) |
---|---|
State | Deferred, archived |
Delegated to: | Mario Limonciello |
Headers | show |
Series | [v2] cpufreq: amd-pstate: add check for cpufreq_cpu_get's return value | expand |
[AMD Official Use Only - AMD Internal Distribution Only] > -----Original Message----- > From: Anastasia Belova <abelova@astralinux.ru> > Sent: Monday, August 26, 2024 9:39 PM > To: Huang, Ray <Ray.Huang@amd.com> > Cc: Anastasia Belova <abelova@astralinux.ru>; Shenoy, Gautham Ranjal > <gautham.shenoy@amd.com>; Limonciello, Mario > <Mario.Limonciello@amd.com>; Yuan, Perry <Perry.Yuan@amd.com>; Rafael J. > Wysocki <rafael@kernel.org>; Viresh Kumar <viresh.kumar@linaro.org>; linux- > pm@vger.kernel.org; linux-kernel@vger.kernel.org; lvc- > project@linuxtesting.org > Subject: [PATCH v2] cpufreq: amd-pstate: add check for cpufreq_cpu_get's > return value > > cpufreq_cpu_get may return NULL. To avoid NULL-dereference check it and > return in case of error. > > Found by Linux Verification Center (linuxtesting.org) with SVACE. > > Signed-off-by: Anastasia Belova <abelova@astralinux.ru> > --- > v2: remove mixing code and declarations > drivers/cpufreq/amd-pstate.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index 68c616b572f2..f8d474168430 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -656,7 +656,12 @@ static void amd_pstate_adjust_perf(unsigned int > cpu, > unsigned long max_perf, min_perf, des_perf, > cap_perf, lowest_nonlinear_perf; > struct cpufreq_policy *policy = cpufreq_cpu_get(cpu); > - struct amd_cpudata *cpudata = policy->driver_data; > + struct amd_cpudata *cpudata; > + > + if (!policy) > + return; > + > + cpudata = policy->driver_data; > > if (policy->min != cpudata->min_limit_freq || policy->max != cpudata- > >max_limit_freq) > amd_pstate_update_min_max_limit(policy); > @@ -870,11 +875,16 @@ static void amd_pstate_init_prefcore(struct > amd_cpudata *cpudata) static void amd_pstate_update_limits(unsigned int > cpu) { > struct cpufreq_policy *policy = cpufreq_cpu_get(cpu); > - struct amd_cpudata *cpudata = policy->driver_data; > + struct amd_cpudata *cpudata; > u32 prev_high = 0, cur_high = 0; > int ret; > bool highest_perf_changed = false; > > + if (!policy) > + return; > + > + cpudata = policy->driver_data; > + > mutex_lock(&amd_pstate_driver_lock); > if ((!amd_pstate_prefcore) || (!cpudata->hw_prefcore)) > goto free_cpufreq_put; > -- > 2.30.2 Thanks for the fix, LGTM, Reviewed-by: Perry Yuan <perry.yuan@amd.com> Best Regards. Perry.
On 26-08-24, 16:38, Anastasia Belova wrote: > cpufreq_cpu_get may return NULL. To avoid NULL-dereference check it > and return in case of error. > > Found by Linux Verification Center (linuxtesting.org) with SVACE. > > Signed-off-by: Anastasia Belova <abelova@astralinux.ru> > --- > v2: remove mixing code and declarations > drivers/cpufreq/amd-pstate.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) Applied. Thanks.
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c index 68c616b572f2..f8d474168430 100644 --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -656,7 +656,12 @@ static void amd_pstate_adjust_perf(unsigned int cpu, unsigned long max_perf, min_perf, des_perf, cap_perf, lowest_nonlinear_perf; struct cpufreq_policy *policy = cpufreq_cpu_get(cpu); - struct amd_cpudata *cpudata = policy->driver_data; + struct amd_cpudata *cpudata; + + if (!policy) + return; + + cpudata = policy->driver_data; if (policy->min != cpudata->min_limit_freq || policy->max != cpudata->max_limit_freq) amd_pstate_update_min_max_limit(policy); @@ -870,11 +875,16 @@ static void amd_pstate_init_prefcore(struct amd_cpudata *cpudata) static void amd_pstate_update_limits(unsigned int cpu) { struct cpufreq_policy *policy = cpufreq_cpu_get(cpu); - struct amd_cpudata *cpudata = policy->driver_data; + struct amd_cpudata *cpudata; u32 prev_high = 0, cur_high = 0; int ret; bool highest_perf_changed = false; + if (!policy) + return; + + cpudata = policy->driver_data; + mutex_lock(&amd_pstate_driver_lock); if ((!amd_pstate_prefcore) || (!cpudata->hw_prefcore)) goto free_cpufreq_put;
cpufreq_cpu_get may return NULL. To avoid NULL-dereference check it and return in case of error. Found by Linux Verification Center (linuxtesting.org) with SVACE. Signed-off-by: Anastasia Belova <abelova@astralinux.ru> --- v2: remove mixing code and declarations drivers/cpufreq/amd-pstate.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-)