PCI: fix memleak when ACPI _CRS is not used.
PATCH 1/1 PCI: fix memleak when ACPI _CRS is not used.
got warning:
unreferenced object 0xffff8801f6914200 (size 512):
comm "swapper/0", pid 1, jiffies 4294893643 (age 2664.644s) hex dump (first 32 bytes):
00 00 c0 fe 00 00 00 00 ff ff ff ff 00 00 00 00 ................
60 58 2f f6 03 88 ff ff 00 02 00 00 00 00 00 00 `X/.............
backtrace:
[<ffffffff81c2408c>] kmemleak_alloc+0x26/0x43
[<ffffffff8113764f>] __kmalloc+0x121/0x183
[<ffffffff81ca8d93>] get_current_resources+0x5a/0xc6
[<ffffffff81c5bedd>] pci_acpi_scan_root+0x13c/0x21c
[<ffffffff81c2a745>] acpi_pci_root_add+0x1e1/0x421
[<ffffffff81408f50>] acpi_device_probe+0x50/0x190
[<ffffffff8149edc7>] really_probe+0x99/0x126
[<ffffffff8149ef83>] driver_probe_device+0x3b/0x56
[<ffffffff8149effd>] __driver_attach+0x5f/0x82
[<ffffffff8149d860>] bus_for_each_dev+0x5c/0x88
[<ffffffff8149eb87>] driver_attach+0x1e/0x20
[<ffffffff8149e7cc>] bus_add_driver+0xca/0x21d
[<ffffffff8149f47b>] driver_register+0x91/0xfe
[<ffffffff81409d09>] acpi_bus_register_driver+0x43/0x45
[<ffffffff8278bdc9>] acpi_pci_root_init+0x20/0x28
[<ffffffff810001e7>] do_one_initcall+0x57/0x134The system have _CRS for root buses, but they are not used because is old...
Try free those not used resource array and name.
--- arch/x86/pci/acpi.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
arch/x86/pci/acpi.c +7 -5
@@ -282,9 +282,6 @@ static void add_resources(struct pci_rooint i;struct resource *res, *root, *conflict; -if (!pci_use_crs) -return ; -coalesce_windows (info,IORESOURCE_MEM );coalesce_windows (info,IORESOURCE_IO );
@@ -336,8 +333,13 @@ get_current_resources(struct acpi_deviceacpi_walk_resources (device->handle,METHOD_NAME__CRS , setup_resource, &info); -add_resources (&info); -return ; +if (pci_use_crs) { +add_resources (&info); + +return ; + } + +kfree (info.name); name_alloc_fail:kfree (info.res);
Quoted 24 lines · Yinghai Lu
got warning:
unreferenced object0xffff8801f6914200(size 512):
comm "swapper/0", pid 1, jiffies 4294893643 (age 2664.644s) hex dump (first 32 bytes):
00 00 c0 fe 00 00 00 00 ff ff ff ff 00 00 00 00 ................ 60 58 2f f6 03 88 ff ff 00 02 00 00 00 00 00 00 `X/............. backtrace:[<ffffffff81c2408c>] kmemleak_alloc+0x26/0x43 [<ffffffff8113764f>] __kmalloc+0x121/0x183 [<ffffffff81ca8d93>] get_current_resources+0x5a/0xc6 [<ffffffff81c5bedd>] pci_acpi_scan_root+0x13c/0x21c [<ffffffff81c2a745>] acpi_pci_root_add+0x1e1/0x421 [<ffffffff81408f50>] acpi_device_probe+0x50/0x190 [<ffffffff8149edc7>] really_probe+0x99/0x126 [<ffffffff8149ef83>] driver_probe_device+0x3b/0x56 [<ffffffff8149effd>] __driver_attach+0x5f/0x82 [<ffffffff8149d860>] bus_for_each_dev+0x5c/0x88 [<ffffffff8149eb87>] driver_attach+0x1e/0x20 [<ffffffff8149e7cc>] bus_add_driver+0xca/0x21d [<ffffffff8149f47b>] driver_register+0x91/0xfe [<ffffffff81409d09>] acpi_bus_register_driver+0x43/0x45 [<ffffffff8278bdc9>] acpi_pci_root_init+0x20/0x28 [<ffffffff810001e7>] do_one_initcall+0x57/0x134
Quoted 3 lines
The system have
_CRSfor root buses, but they are not used because is old...Try free those not used resource array and name.
Thanks for fixing this.
Quoted 40 lines
Signed-off-by Yinghai Lu <[email protected]>---
arch/x86/pci/acpi.c | 12 +++++++-----1 file changed, 7 insertions(+), 5 deletions(-)Index:
linux-2.6/arch/x86/pci/acpi.c
===================================================================arch/x86/pci/acpi.c +7
-5@@ -282,9 +282,6 @@ static void add_resources(struct pci_roo int i; struct resource *res, *root, *conflict; - if (!pci_use_crs) - return; - coalesce_windows(info, IORESOURCE_MEM); coalesce_windows(info, IORESOURCE_IO);@@ -336,8 +333,13 @@ get_current_resources(struct acpi_device acpi_walk_resources(device->handle, METHOD_NAME__CRS, setup_resource, &info); - add_resources(&info); - return; + if (pci_use_crs) { + add_resources(&info); + + return; + } + + kfree(info.name);name_alloc_fail:
kfree(info.res);
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Jesse Barnes
AppliedQuoted 24 lines · On Mon, 20 Feb 2012 17:23:47 -0800 Yinghai Lu <[email protected]> wrote:
got warning:
unreferenced object0xffff8801f6914200(size 512):
comm "swapper/0", pid 1, jiffies 4294893643 (age 2664.644s) hex dump (first 32 bytes):00 00 c0 fe 00 00 00 00 ff ff ff ff 00 00 00 00 ................ 60 58 2f f6 03 88 ff ff 00 02 00 00 00 00 00 00 `X/............. backtrace: [<ffffffff81c2408c>] kmemleak_alloc+0x26/0x43 [<ffffffff8113764f>] __kmalloc+0x121/0x183 [<ffffffff81ca8d93>] get_current_resources+0x5a/0xc6 [<ffffffff81c5bedd>] pci_acpi_scan_root+0x13c/0x21c [<ffffffff81c2a745>] acpi_pci_root_add+0x1e1/0x421 [<ffffffff81408f50>] acpi_device_probe+0x50/0x190 [<ffffffff8149edc7>] really_probe+0x99/0x126 [<ffffffff8149ef83>] driver_probe_device+0x3b/0x56 [<ffffffff8149effd>] __driver_attach+0x5f/0x82 [<ffffffff8149d860>] bus_for_each_dev+0x5c/0x88 [<ffffffff8149eb87>] driver_attach+0x1e/0x20 [<ffffffff8149e7cc>] bus_add_driver+0xca/0x21d [<ffffffff8149f47b>] driver_register+0x91/0xfe [<ffffffff81409d09>] acpi_bus_register_driver+0x43/0x45 [<ffffffff8278bdc9>] acpi_pci_root_init+0x20/0x28 [<ffffffff810001e7>] do_one_initcall+0x57/0x134
Quoted 5 lines
The system have
_CRSfor root buses, but they are not used because is old...Try free those not used resource array and name.
Signed-off-by Yinghai Lu <[email protected]>
Applied to for-linus, thanks.
Signature · 1 line
Jesse Barnes, Intel Open Source Technology Center