Re: [PATCH] Fix uninitialized local variable "covered" in i386acpi-cpufreq driver

From: Andrew Morton
Date: Thu Jul 26 2007 - 20:12:50 EST


On Thu, 26 Jul 2007 16:46:30 -0700 Fenghua Yu <fenghua.yu@xxxxxxxxx> wrote:

> The local variable "covered" is used without initialization in i386 acpi-cpufreq
> driver. The initial value of covered should be 0. The bug will cause memory leak
> when hit. The following patch fixes this bug.
>
> Signed-off-by: Fenghua Yu <fenghua.yu@xxxxxxxxx>
>
> ---
>
> arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c | 2 +-
> 1 files changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
> index 6f846be..bfb4959 100644
> --- a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
> +++ b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
> @@ -511,7 +511,7 @@ acpi_cpufreq_guess_freq(struct acpi_cpufreq_data *data, unsigned int cpu)
> static int acpi_cpufreq_early_init(void)
> {
> struct acpi_processor_performance *data;
> - cpumask_t covered;
> + cpumask_t covered=0;
> unsigned int i, j;
>
> dprintk("acpi_cpufreq_early_init\n");

- please put spaces around "="

- that should have been CPU_MASK_NONE

- that code's way overengineered. This:

--- a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c~a
+++ a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
@@ -511,7 +511,6 @@ acpi_cpufreq_guess_freq(struct acpi_cpuf
static int acpi_cpufreq_early_init(void)
{
struct acpi_processor_performance *data;
- cpumask_t covered;
unsigned int i, j;

dprintk("acpi_cpufreq_early_init\n");
@@ -520,14 +519,13 @@ static int acpi_cpufreq_early_init(void)
data = kzalloc(sizeof(struct acpi_processor_performance),
GFP_KERNEL);
if (!data) {
- for_each_cpu_mask(j, covered) {
+ for_each_possible_cpu(j) {
kfree(acpi_perf_data[j]);
acpi_perf_data[j] = NULL;
}
return -ENOMEM;
}
acpi_perf_data[i] = data;
- cpu_set(i, covered);
}

/* Do initialization in ACPI core */
_

should do the trick (please check it)

- what we have here is an open-coded alloc_percpu(). Hows about
converting it to alloc_percpu()?

- that function should have been be __init.


How's that for a one-liner? ;)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/