Re: [PATCH] cpufreq: acpi-cpufreq: add NULL check for acpi_perf_data before freeing
Zhongqiu Han <[email protected]>
| Newsgroups | org.kernel.vger.linux-pm |
|---|---|
| Message-ID | <[email protected]> |
On 8/10/2026 7:21 PM, Zhongqiu Han wrote: > On 8/10/2026 2:10 PM, lirongqing wrote: >> From: Li RongQing <[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? Sorry, typo: acpi_perf_data() --> free_acpi_perf_data() > > >> 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