]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
PCI/MSI: Fix msi_desc->affinity memory leak when freeing MSI IRQs
authorPrarit Bhargava <prarit@redhat.com>
Wed, 15 Feb 2017 16:53:08 +0000 (11:53 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 17 Feb 2017 20:32:05 +0000 (14:32 -0600)
During device setup, msix_setup_entries() and msi_setup_entry() allocate
msi_desc by calling alloc_msi_entry().  alloc_msi_entry() can also allocate
a affinity cpumask.  During device teardown free_msi_irqs() is called and
the msi_desc is freed, but the affinity cpumask is leaked.

Fix it by calling free_msi_entry() which frees both the msi_desc and the
affinity cpumask.

[bhelgaas: aa48b6f70886 ("genirq/MSI: Move alloc_msi_entry() from PCI into
 generic MSI code") moved alloc_msi_entry() from drivers/pci/msi.c to
 kernel/irq/msi.c and added a new corresponding free_msi_entry() interface.

 After aa48b6f70886, pci/msi.c used alloc_msi_entry(), but did its own
 kfree() instead of using free_msi_entry().  28f4b04143c5 ("genirq/msi: Add
 cpumask allocation to alloc_msi_entry") added affinity to both
 alloc_msi_entry() and free_msi_entry(), but pci/msi.c didn't use
 free_msi_entry(), resulting in this leak.]

Fixes: aa48b6f70886 ("genirq/MSI: Move alloc_msi_entry() from PCI into generic MSI code")
Signed-off-by: Prarit Bhargava <prarit@redhat.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
CC: Myron Stowe <mstowe@redhat.com>
drivers/pci/msi.c

index 93cc268c6ff1731e484aa7565baf2f2b7951d77b..78e4a1adb6b011389d4c2a17f4d607877e475131 100644 (file)
@@ -360,7 +360,7 @@ static void free_msi_irqs(struct pci_dev *dev)
                }
 
                list_del(&entry->list);
-               kfree(entry);
+               free_msi_entry(entry);
        }
 
        if (dev->msi_irq_groups) {