]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/hns: Fix invalid sq params not being blocked
authorJunxian Huang <huangjunxian6@hisilicon.com>
Tue, 11 Mar 2025 08:48:54 +0000 (16:48 +0800)
committerLeon Romanovsky <leon@kernel.org>
Wed, 12 Mar 2025 18:35:50 +0000 (14:35 -0400)
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: 6ec429d5887a ("RDMA/hns: Support userspace configuring congestion control algorithm with QP granularity")
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
Link: https://patch.msgid.link/20250311084857.3803665-5-huangjunxian6@hisilicon.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/hns/hns_roce_qp.c

index a97348a1c61f173ad15af55b0b537caaf901b9ff..8408f9a5c309db03cfa51a105c0ef76d41c4f2c1 100644 (file)
@@ -1121,24 +1121,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;