| From 4ce6435820d1f1cc2c2788e232735eb244bcc8a3 Mon Sep 17 00:00:00 2001 |
| From: Lukas Wunner <lukas@wunner.de> |
| Date: Thu, 19 Jul 2018 17:27:31 -0500 |
| Subject: PCI: hotplug: Don't leak pci_slot on registration failure |
| |
| From: Lukas Wunner <lukas@wunner.de> |
| |
| commit 4ce6435820d1f1cc2c2788e232735eb244bcc8a3 upstream. |
| |
| If addition of sysfs files fails on registration of a hotplug slot, the |
| struct pci_slot as well as the entry in the slot_list is leaked. The |
| issue has been present since the hotplug core was introduced in 2002: |
| https://git.kernel.org/tglx/history/c/a8a2069f432c |
| |
| Perhaps the idea was that even though sysfs addition fails, the slot |
| should still be usable. But that's not how drivers use the interface, |
| they abort probe if a non-zero value is returned. |
| |
| Signed-off-by: Lukas Wunner <lukas@wunner.de> |
| Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> |
| Cc: stable@vger.kernel.org # v2.4.15+ |
| Cc: Greg Kroah-Hartman <greg@kroah.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/pci/hotplug/pci_hotplug_core.c | 9 +++++++++ |
| 1 file changed, 9 insertions(+) |
| |
| --- a/drivers/pci/hotplug/pci_hotplug_core.c |
| +++ b/drivers/pci/hotplug/pci_hotplug_core.c |
| @@ -455,8 +455,17 @@ int __pci_hp_register(struct hotplug_slo |
| list_add(&slot->slot_list, &pci_hotplug_slot_list); |
| |
| result = fs_add_slot(pci_slot); |
| + if (result) |
| + goto err_list_del; |
| + |
| kobject_uevent(&pci_slot->kobj, KOBJ_ADD); |
| dbg("Added slot %s to the list\n", name); |
| + goto out; |
| + |
| +err_list_del: |
| + list_del(&slot->slot_list); |
| + pci_slot->hotplug = NULL; |
| + pci_destroy_slot(pci_slot); |
| out: |
| mutex_unlock(&pci_hp_mutex); |
| return result; |