PCI/IOV: Fix memory leak in pci_iov_add_virtfn()
commit 8c386cc817878588195dde38e919aa6ba9409d58 upstream.
In the implementation of pci_iov_add_virtfn() the allocated virtfn is
leaked if pci_setup_device() fails. The error handling is not calling
pci_stop_and_remove_bus_device(). Change the goto label to failed2.
Fixes: 156c55325d
("PCI: Check for pci_setup_device() failure in pci_iov_add_virtfn()")
Link: https://lore.kernel.org/r/20191125195255.23740-1-navid.emamdoost@gmail.com
Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
960e54416b
commit
93b5c76198
1 changed files with 4 additions and 5 deletions
|
@ -188,10 +188,10 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
|
|||
sprintf(buf, "virtfn%u", id);
|
||||
rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);
|
||||
if (rc)
|
||||
goto failed2;
|
||||
goto failed1;
|
||||
rc = sysfs_create_link(&virtfn->dev.kobj, &dev->dev.kobj, "physfn");
|
||||
if (rc)
|
||||
goto failed3;
|
||||
goto failed2;
|
||||
|
||||
kobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE);
|
||||
|
||||
|
@ -199,11 +199,10 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
|
|||
|
||||
return 0;
|
||||
|
||||
failed3:
|
||||
sysfs_remove_link(&dev->dev.kobj, buf);
|
||||
failed2:
|
||||
pci_stop_and_remove_bus_device(virtfn);
|
||||
sysfs_remove_link(&dev->dev.kobj, buf);
|
||||
failed1:
|
||||
pci_stop_and_remove_bus_device(virtfn);
|
||||
pci_dev_put(dev);
|
||||
failed0:
|
||||
virtfn_remove_bus(dev->bus, bus);
|
||||
|
|
Loading…
Add table
Reference in a new issue