Takashi Iwai ba204b
From 3bbfd319034ddce59e023837a4aa11439460509b Mon Sep 17 00:00:00 2001
Takashi Iwai ba204b
From: Feilong Lin <linfeilong@huawei.com>
Takashi Iwai ba204b
Date: Thu, 25 Mar 2021 15:26:00 +0800
Takashi Iwai ba204b
Subject: [PATCH] ACPI / hotplug / PCI: Fix reference count leak in enable_slot()
Takashi Iwai ba204b
Git-commit: 3bbfd319034ddce59e023837a4aa11439460509b
Takashi Iwai ba204b
Patch-mainline: v5.13-rc1
Takashi Iwai ba204b
References: git-fixes
Takashi Iwai ba204b
Takashi Iwai ba204b
In enable_slot(), if pci_get_slot() returns NULL, we clear the SLOT_ENABLED
Takashi Iwai ba204b
flag. When pci_get_slot() finds a device, it increments the device's
Takashi Iwai ba204b
reference count.  In this case, we did not call pci_dev_put() to decrement
Takashi Iwai ba204b
the reference count, so the memory of the device (struct pci_dev type) will
Takashi Iwai ba204b
eventually leak.
Takashi Iwai ba204b
Takashi Iwai ba204b
Call pci_dev_put() to decrement its reference count when pci_get_slot()
Takashi Iwai ba204b
returns a PCI device.
Takashi Iwai ba204b
Takashi Iwai ba204b
Link: https://lore.kernel.org/r/b411af88-5049-a1c6-83ac-d104a1f429be@huawei.com
Takashi Iwai ba204b
Signed-off-by: Feilong Lin <linfeilong@huawei.com>
Takashi Iwai ba204b
Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
Takashi Iwai ba204b
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Takashi Iwai ba204b
Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Takashi Iwai ba204b
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai ba204b
Takashi Iwai ba204b
---
Takashi Iwai ba204b
 drivers/pci/hotplug/acpiphp_glue.c | 1 +
Takashi Iwai ba204b
 1 file changed, 1 insertion(+)
Takashi Iwai ba204b
Takashi Iwai ba204b
diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
Takashi Iwai ba204b
index 3365c93abf0e..f031302ad401 100644
Takashi Iwai ba204b
--- a/drivers/pci/hotplug/acpiphp_glue.c
Takashi Iwai ba204b
+++ b/drivers/pci/hotplug/acpiphp_glue.c
Takashi Iwai ba204b
@@ -533,6 +533,7 @@ static void enable_slot(struct acpiphp_slot *slot, bool bridge)
Takashi Iwai ba204b
 			slot->flags &= ~SLOT_ENABLED;
Takashi Iwai ba204b
 			continue;
Takashi Iwai ba204b
 		}
Takashi Iwai ba204b
+		pci_dev_put(dev);
Takashi Iwai ba204b
 	}
Takashi Iwai ba204b
 }
Takashi Iwai ba204b
 
Takashi Iwai ba204b
-- 
Takashi Iwai ba204b
2.26.2
Takashi Iwai ba204b