34 lines
1.3 KiB
Diff
34 lines
1.3 KiB
Diff
From: Alexei Starovoitov <ast@plumgrid.com>
|
|
Date: Wed, 4 Jun 2014 15:49:50 -0700
|
|
Subject: PCI/MSI: Fix memory leak in free_msi_irqs()
|
|
Origin: https://git.kernel.org/linus/b701c0b1fe819a2083fc6ec5332e0e4492b9516d
|
|
|
|
free_msi_irqs() is leaking memory, since list_for_each_entry(entry,
|
|
&dev->msi_list, list) {...} is never executed, because dev->msi_list is
|
|
made empty by the loop just above this one.
|
|
|
|
Fix it by relying on zero termination of attribute array like
|
|
populate_msi_sysfs() does.
|
|
|
|
Fixes: 1c51b50c2995 ("PCI/MSI: Export MSI mode using attributes, not kobjects")
|
|
Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
|
|
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
|
|
Acked-by: Neil Horman <nhorman@tuxdriver.com>
|
|
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
CC: stable@vger.kernel.org # v3.14+
|
|
---
|
|
drivers/pci/msi.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
--- a/drivers/pci/msi.c
|
|
+++ b/drivers/pci/msi.c
|
|
@@ -414,7 +414,7 @@ static void free_msi_irqs(struct pci_dev
|
|
if (dev->msi_irq_groups) {
|
|
sysfs_remove_groups(&dev->dev.kobj, dev->msi_irq_groups);
|
|
msi_attrs = dev->msi_irq_groups[0]->attrs;
|
|
- list_for_each_entry(entry, &dev->msi_list, list) {
|
|
+ while (msi_attrs[count]) {
|
|
dev_attr = container_of(msi_attrs[count],
|
|
struct device_attribute, attr);
|
|
kfree(dev_attr->attr.name);
|