]>
Commit | Line | Data |
---|---|---|
d9b1f36d GKH |
1 | From dab5fff14df2cd16eb1ad4c02e83915e1063fece Mon Sep 17 00:00:00 2001 |
2 | From: Zhang Rui <rui.zhang@intel.com> | |
3 | Date: Tue, 12 Oct 2010 09:09:37 +0800 | |
4 | Subject: acpi-cpufreq: fix a memleak when unloading driver | |
5 | ||
6 | From: Zhang Rui <rui.zhang@intel.com> | |
7 | ||
8 | commit dab5fff14df2cd16eb1ad4c02e83915e1063fece upstream. | |
9 | ||
10 | We didn't free per_cpu(acfreq_data, cpu)->freq_table | |
11 | when acpi_freq driver is unloaded. | |
12 | ||
13 | Resulting in the following messages in /sys/kernel/debug/kmemleak: | |
14 | ||
15 | unreferenced object 0xf6450e80 (size 64): | |
16 | comm "modprobe", pid 1066, jiffies 4294677317 (age 19290.453s) | |
17 | hex dump (first 32 bytes): | |
18 | 00 00 00 00 e8 a2 24 00 01 00 00 00 00 9f 24 00 ......$.......$. | |
19 | 02 00 00 00 00 6a 18 00 03 00 00 00 00 35 0c 00 .....j.......5.. | |
20 | backtrace: | |
21 | [<c123ba97>] kmemleak_alloc+0x27/0x50 | |
22 | [<c109f96f>] __kmalloc+0xcf/0x110 | |
23 | [<f9da97ee>] acpi_cpufreq_cpu_init+0x1ee/0x4e4 [acpi_cpufreq] | |
24 | [<c11cd8d2>] cpufreq_add_dev+0x142/0x3a0 | |
25 | [<c11920b7>] sysdev_driver_register+0x97/0x110 | |
26 | [<c11cce56>] cpufreq_register_driver+0x86/0x140 | |
27 | [<f9dad080>] 0xf9dad080 | |
28 | [<c1001130>] do_one_initcall+0x30/0x160 | |
29 | [<c10626e9>] sys_init_module+0x99/0x1e0 | |
30 | [<c1002d97>] sysenter_do_call+0x12/0x26 | |
31 | [<ffffffff>] 0xffffffff | |
32 | ||
33 | https://bugzilla.kernel.org/show_bug.cgi?id=15807#c21 | |
34 | ||
35 | Tested-by: Toralf Forster <toralf.foerster@gmx.de> | |
36 | Signed-off-by: Zhang Rui <rui.zhang@intel.com> | |
37 | Signed-off-by: Len Brown <len.brown@intel.com> | |
38 | Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> | |
39 | ||
40 | --- | |
41 | arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | 1 + | |
42 | 1 file changed, 1 insertion(+) | |
43 | ||
44 | --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | |
45 | +++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | |
46 | @@ -701,6 +701,7 @@ static int acpi_cpufreq_cpu_exit(struct | |
47 | per_cpu(acfreq_data, policy->cpu) = NULL; | |
48 | acpi_processor_unregister_performance(data->acpi_data, | |
49 | policy->cpu); | |
50 | + kfree(data->freq_table); | |
51 | kfree(data); | |
52 | } | |
53 |