答复: [外部邮件] Re: [PATCH] cpufreq: a cpi-cpufreq: add NULL check for acpi_perf_dat a before freeing

"Li,Rongqing" <[email protected]>
Newsgroups org.kernel.vger.linux-pm
Message-ID <[email protected]>

> >
> > If alloc_percpu() fails in acpi_cpufreq_early_init(), acpi_perf_data
> > is NULL.  Calling free_acpi_perf_data() will execute per_cpu_ptr(NULL,
> > i), which does not return NULL but an offset pointer.
> 
> Hi RongQing,
> 
> Could you please confirm if acpi_perf_data() can ever be executed when
> alloc_percpu() fails?

You are right, acpi_perf_data() can not be called when alloc_percpu() fails

Please drop this patch

thanks 

[Li,Rongqing] 



> 
> 
> > Dereferencing ->shared_cpu_map on this invalid pointer leads to a kernel
> > crash.
> >
> > Fix these issues by adding a NULL check at the start of
> > free_acpi_perf_data() and setting acpi_perf_data to NULL after freeing.
> >
> > Signed-off-by: Li RongQing <[email protected]>
> > ---
> >   drivers/cpufreq/acpi-cpufreq.c | 5 ++++-
> >   1 file changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c
> > index 87e4923..cd2ca87 100644
> > --- a/drivers/cpufreq/acpi-cpufreq.c
> > +++ b/drivers/cpufreq/acpi-cpufreq.c
> > @@ -517,11 +517,14 @@ static void free_acpi_perf_data(void)
> >   {
> >   	unsigned int i;
> >
> > -	/* Freeing a NULL pointer is OK, and alloc_percpu zeroes. */
> > +	if (!acpi_perf_data)
> > +		return;
> > +
> >   	for_each_possible_cpu(i)
> >   		free_cpumask_var(per_cpu_ptr(acpi_perf_data, i)
> >   				 ->shared_cpu_map);
> >   	free_percpu(acpi_perf_data);
> > +	acpi_perf_data = NULL;
> >   }
> >
> >   static int cpufreq_boost_down_prep(unsigned int cpu)
> 
> 
> --
> Thx and BRs,
> Zhongqiu Han
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.