RDMA/hns: WARN_ON if get a reserved sl from users
authorWeihang Li <liweihang@huawei.com>
Fri, 11 Dec 2020 01:37:31 +0000 (09:37 +0800)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 11 Dec 2020 19:21:34 +0000 (15:21 -0400)
According to the RoCE v1 specification, the sl (service level) 0-7 are
mapped directly to priorities 0-7 respectively, sl 8-15 are reserved. The
driver should verify whether the value of sl is larger than 7, if so, an
exception should be returned.

Link: https://lore.kernel.org/r/1607650657-35992-6-git-send-email-liweihang@huawei.com
Signed-off-by: Weihang Li <liweihang@huawei.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/hns/hns_roce_hw_v2.c

index 7a0c1abde02de321ba1a73233c57ef93fcbf17d6..b2b80528c3bbad4c41df23fbfe352a26820f6387 100644 (file)
@@ -433,6 +433,10 @@ static int fill_ud_av(struct hns_roce_v2_ud_send_wqe *ud_sq_wqe,
                       V2_UD_SEND_WQE_BYTE_36_TCLASS_S, ah->av.tclass);
        roce_set_field(ud_sq_wqe->byte_40, V2_UD_SEND_WQE_BYTE_40_FLOW_LABEL_M,
                       V2_UD_SEND_WQE_BYTE_40_FLOW_LABEL_S, ah->av.flowlabel);
+
+       if (WARN_ON(ah->av.sl > MAX_SERVICE_LEVEL))
+               return -EINVAL;
+
        roce_set_field(ud_sq_wqe->byte_40, V2_UD_SEND_WQE_BYTE_40_SL_M,
                       V2_UD_SEND_WQE_BYTE_40_SL_S, ah->av.sl);