]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Apr 2025 12:30:51 +0000 (14:30 +0200)
commit d2b9d97e89c79c95f8b517e4fa43fd100f936acc upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c

index e864c453c5e6b05d10562909f495bf5d73c92145..256b19f68caed01899f7b7e7e571e2c3b6a3b0a7 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++)
@@ -2173,8 +2175,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;