Commit d2b9d97e authored by Haoxiang Li's avatar Haoxiang Li Committed by Paolo Abeni
Browse files

qlcnic: fix memory leak issues in qlcnic_sriov_common.c



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: 91b7282b ("qlcnic: Support VLAN id config.")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarHaoxiang Li <haoxiang_li2024@163.com>
Link: https://patch.msgid.link/20250307094952.14874-1-haoxiang_li2024@163.com


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 415f135a
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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,9 +2169,11 @@ 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;
}