Message ID | 20221119070202.1407648-1-yangyingliang@huawei.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 3637a29ccbb6461b7268c5c5db525935d510afc6 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,v2] bnx2x: fix pci device refcount leak in bnx2x_vf_is_pcie_pending() | expand |
On Sat, Nov 19, 2022 at 03:02:02PM +0800, Yang Yingliang wrote: > 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(). Call pci_dev_put() before returning from > bnx2x_vf_is_pcie_pending() to avoid refcount leak. > > Fixes: b56e9670ffa4 ("bnx2x: Prepare device and initialize VF database") > Suggested-by: Jakub Kicinski <kuba@kernel.org> > Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> > --- > v1 -> v2: > Unindents success path suggested by Jakub. > And Cc all pepole in the maintainer list. > --- > drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c | 12 ++++++++---- > 1 file changed, 8 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c > index 11d15cd03600..77d4cb4ad782 100644 > --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c > +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c > @@ -795,16 +795,20 @@ static void bnx2x_vf_enable_traffic(struct bnx2x *bp, struct bnx2x_virtf *vf) > > static u8 bnx2x_vf_is_pcie_pending(struct bnx2x *bp, u8 abs_vfid) > { > - struct pci_dev *dev; > struct bnx2x_virtf *vf = bnx2x_vf_by_abs_fid(bp, abs_vfid); > + struct pci_dev *dev; > + bool pending; > > if (!vf) > return false; > > dev = pci_get_domain_bus_and_slot(vf->domain, vf->bus, vf->devfn); > - if (dev) > - return bnx2x_is_pcie_pending(dev); > - return false; > + if (!dev) > + return false; > + pending = bnx2x_is_pcie_pending(dev); > + pci_dev_put(dev); > + > + return pending; > } > Thanks, Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Hello: This patch was applied to netdev/net.git (master) by Paolo Abeni <pabeni@redhat.com>: On Sat, 19 Nov 2022 15:02:02 +0800 you wrote: > 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(). Call pci_dev_put() before returning from > bnx2x_vf_is_pcie_pending() to avoid refcount leak. > > Fixes: b56e9670ffa4 ("bnx2x: Prepare device and initialize VF database") > Suggested-by: Jakub Kicinski <kuba@kernel.org> > Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> > > [...] Here is the summary with links: - [net,v2] bnx2x: fix pci device refcount leak in bnx2x_vf_is_pcie_pending() https://git.kernel.org/netdev/net/c/3637a29ccbb6 You are awesome, thank you!
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c index 11d15cd03600..77d4cb4ad782 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c @@ -795,16 +795,20 @@ static void bnx2x_vf_enable_traffic(struct bnx2x *bp, struct bnx2x_virtf *vf) static u8 bnx2x_vf_is_pcie_pending(struct bnx2x *bp, u8 abs_vfid) { - struct pci_dev *dev; struct bnx2x_virtf *vf = bnx2x_vf_by_abs_fid(bp, abs_vfid); + struct pci_dev *dev; + bool pending; if (!vf) return false; dev = pci_get_domain_bus_and_slot(vf->domain, vf->bus, vf->devfn); - if (dev) - return bnx2x_is_pcie_pending(dev); - return false; + if (!dev) + return false; + pending = bnx2x_is_pcie_pending(dev); + pci_dev_put(dev); + + return pending; } int bnx2x_vf_flr_clnup_epilog(struct bnx2x *bp, u8 abs_vfid)
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(). Call pci_dev_put() before returning from bnx2x_vf_is_pcie_pending() to avoid refcount leak. Fixes: b56e9670ffa4 ("bnx2x: Prepare device and initialize VF database") Suggested-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> --- v1 -> v2: Unindents success path suggested by Jakub. And Cc all pepole in the maintainer list. --- drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)