net: pch_gbe: fix pci device refcount leak while module exiting
authorYang Yingliang <yangyingliang@huawei.com>
Thu, 17 Nov 2022 13:51:48 +0000 (21:51 +0800)
committerJakub Kicinski <kuba@kernel.org>
Sat, 19 Nov 2022 03:40:14 +0000 (19:40 -0800)
As comment of pci_get_domain_bus_and_slot() says, it returns
a pci device with refcount increment, when finish using it,
the caller must decrement the reference count by calling
pci_dev_put().

In pch_gbe_probe(), pci_get_domain_bus_and_slot() is called,
so in error path in probe() and remove() function, pci_dev_put()
should be called to avoid refcount leak. Compile tested only.

Fixes: 1a0bdadb4e36 ("net/pch_gbe: supports eg20t ptp clock")
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Link: https://lore.kernel.org/r/20221117135148.301014-1-yangyingliang@huawei.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c

index c9ae471..28b7cec 100644 (file)
@@ -2460,6 +2460,7 @@ static void pch_gbe_remove(struct pci_dev *pdev)
        unregister_netdev(netdev);
 
        pch_gbe_phy_hw_reset(&adapter->hw);
+       pci_dev_put(adapter->ptp_pdev);
 
        free_netdev(netdev);
 }
@@ -2534,7 +2535,7 @@ static int pch_gbe_probe(struct pci_dev *pdev,
        /* setup the private structure */
        ret = pch_gbe_sw_init(adapter);
        if (ret)
-               goto err_free_netdev;
+               goto err_put_dev;
 
        /* Initialize PHY */
        ret = pch_gbe_init_phy(adapter);
@@ -2592,6 +2593,8 @@ static int pch_gbe_probe(struct pci_dev *pdev,
 
 err_free_adapter:
        pch_gbe_phy_hw_reset(&adapter->hw);
+err_put_dev:
+       pci_dev_put(adapter->ptp_pdev);
 err_free_netdev:
        free_netdev(netdev);
        return ret;