Message ID | 20221206103031.20609-1-yuancan@huawei.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] drivers: net: qlcnic: Fix potential memory leak in qlcnic_sriov_init() | expand |
On Tue, Dec 06, 2022 at 10:30:31AM +0000, Yuan Can wrote: > If vp alloc failed in qlcnic_sriov_init(), all previously allocated vp > needs to be freed. > > Fixes: f197a7aa6288 ("qlcnic: VF-PF communication channel implementation") > Signed-off-by: Yuan Can <yuancan@huawei.com> > --- > drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c > index 9282321c2e7f..d0470c62e1b2 100644 > --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c > +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c > @@ -222,6 +222,8 @@ int qlcnic_sriov_init(struct qlcnic_adapter *adapter, int num_vfs) > > qlcnic_destroy_async_wq: > destroy_workqueue(bc->bc_async_wq); > + while (i--) > + kfree(sriov->vf_info[i].vp); These lines should be before destroy_workqueue(bc->bc_async_wq); Thanks > > qlcnic_destroy_trans_wq: > destroy_workqueue(bc->bc_trans_wq); > -- > 2.17.1 >
在 2022/12/7 15:56, Leon Romanovsky 写道: > On Tue, Dec 06, 2022 at 10:30:31AM +0000, Yuan Can wrote: >> If vp alloc failed in qlcnic_sriov_init(), all previously allocated vp >> needs to be freed. >> >> Fixes: f197a7aa6288 ("qlcnic: VF-PF communication channel implementation") >> Signed-off-by: Yuan Can <yuancan@huawei.com> >> --- >> drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c >> index 9282321c2e7f..d0470c62e1b2 100644 >> --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c >> +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c >> @@ -222,6 +222,8 @@ int qlcnic_sriov_init(struct qlcnic_adapter *adapter, int num_vfs) >> >> qlcnic_destroy_async_wq: >> destroy_workqueue(bc->bc_async_wq); >> + while (i--) >> + kfree(sriov->vf_info[i].vp); > These lines should be before destroy_workqueue(bc->bc_async_wq); Ok, thanks for the review!
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c index 9282321c2e7f..d0470c62e1b2 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c @@ -222,6 +222,8 @@ int qlcnic_sriov_init(struct qlcnic_adapter *adapter, int num_vfs) qlcnic_destroy_async_wq: destroy_workqueue(bc->bc_async_wq); + while (i--) + kfree(sriov->vf_info[i].vp); qlcnic_destroy_trans_wq: destroy_workqueue(bc->bc_trans_wq);
If vp alloc failed in qlcnic_sriov_init(), all previously allocated vp needs to be freed. Fixes: f197a7aa6288 ("qlcnic: VF-PF communication channel implementation") Signed-off-by: Yuan Can <yuancan@huawei.com> --- drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 2 ++ 1 file changed, 2 insertions(+)