]> www.infradead.org Git - users/willy/pagecache.git/commitdiff
qlcnic: fix memory leak issues in qlcnic_sriov_common.c
authorHaoxiang Li <haoxiang_li2024@163.com>
Fri, 7 Mar 2025 09:49:52 +0000 (17:49 +0800)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 11 Mar 2025 14:23:28 +0000 (15:23 +0100)
Add qlcnic_sriov_free_vlans() in qlcnic_sriov_alloc_vlans() if
any sriov_vlans fails to be allocated.
Add qlcnic_sriov_free_vlans() to free the memory allocated by
qlcnic_sriov_alloc_vlans() if "sriov->allowed_vlans" fails to
be allocated.

Fixes: 91b7282b613d ("qlcnic: Support VLAN id config.")
Cc: stable@vger.kernel.org
Signed-off-by: Haoxiang Li <haoxiang_li2024@163.com>
Link: https://patch.msgid.link/20250307094952.14874-1-haoxiang_li2024@163.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c

index f9dd50152b1e3e2ec476fb4238a34f265ef72332..28d24d59efb84f97e619c2aeba4cc10d5a0ea955 100644 (file)
@@ -454,8 +454,10 @@ static int qlcnic_sriov_set_guest_vlan_mode(struct qlcnic_adapter *adapter,
 
        num_vlans = sriov->num_allowed_vlans;
        sriov->allowed_vlans = kcalloc(num_vlans, sizeof(u16), GFP_KERNEL);
-       if (!sriov->allowed_vlans)
+       if (!sriov->allowed_vlans) {
+               qlcnic_sriov_free_vlans(adapter);
                return -ENOMEM;
+       }
 
        vlans = (u16 *)&cmd->rsp.arg[3];
        for (i = 0; i < num_vlans; i++)
@@ -2167,8 +2169,10 @@ int qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *adapter)
                vf = &sriov->vf_info[i];
                vf->sriov_vlans = kcalloc(sriov->num_allowed_vlans,
                                          sizeof(*vf->sriov_vlans), GFP_KERNEL);
-               if (!vf->sriov_vlans)
+               if (!vf->sriov_vlans) {
+                       qlcnic_sriov_free_vlans(adapter);
                        return -ENOMEM;
+               }
        }
 
        return 0;