Commit 403f2fb1 authored by Junxian Huang's avatar Junxian Huang
Browse files

RDMA/hns: Fix invalid sq params not being blocked

maillist inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IBV0G0
CVE: NA

Reference: https://web.git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git/commit/?h=wip/leon-for-rc&id=13c90c222049764bb7e6a1689bd785f424bd8bd5



----------------------------------------------------------------------

SQ params from userspace are checked in by set_user_sq_size(). But
when the check fails, the function doesn't return but instead keep
running and overwrite 'ret'. As a result, the invalid params will
not get blocked actually.

Add a return right after the failed check. Besides, although the
check result of kernel sq params will not be overwritten, to keep
coding style unified, move default_congest_type() before
set_kernel_sq_size().

Fixes: 2dc6891c ("RDMA/hns: Support userspace configuring congestion control algorithm with QP granularity")
Signed-off-by: default avatarJunxian Huang <huangjunxian6@hisilicon.com>
Link: https://patch.msgid.link/20250311084857.3803665-5-huangjunxian6@hisilicon.com


Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
Signed-off-by: default avatarXinghai Cen <cenxinghai@h-partners.com>
parent 7ca6a3a7
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -1272,24 +1272,23 @@ static int set_qp_param(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp,
						 ibucontext);
		hr_qp->config = uctx->config;
		ret = set_user_sq_size(hr_dev, &init_attr->cap, hr_qp, ucmd);
		if (ret)
		if (ret) {
			ibdev_err(ibdev,
				  "failed to set user SQ size, ret = %d.\n",
				  ret);
			return ret;
		}

		ret = set_congest_param(hr_dev, hr_qp, ucmd);
		if (ret)
			return ret;
	} else {
		if (hr_dev->pci_dev->revision >= PCI_REVISION_ID_HIP09)
			hr_qp->config = HNS_ROCE_EXSGE_FLAGS;
		default_congest_type(hr_dev, hr_qp);
		ret = set_kernel_sq_size(hr_dev, &init_attr->cap, hr_qp);
		if (ret)
			ibdev_err(ibdev,
				  "failed to set kernel SQ size, ret = %d.\n",
				  ret);

		default_congest_type(hr_dev, hr_qp);
	}

	return ret;