From mboxrd@z Thu Jan 1 00:00:00 1970 From: Leon Romanovsky Subject: [PATCH rdma-next 3/4] IB/mlx5: Verify that driver supports user flags Date: Sun, 7 Oct 2018 12:03:36 +0300 Message-ID: <20181007090337.21037-4-leon@kernel.org> References: <20181007090337.21037-1-leon@kernel.org> Cc: Leon Romanovsky , RDMA mailing list , Guy Levi , Yonatan Cohen , Saeed Mahameed , linux-netdev To: Doug Ledford , Jason Gunthorpe Return-path: Received: from mail.kernel.org ([198.145.29.99]:52804 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726402AbeJGQK2 (ORCPT ); Sun, 7 Oct 2018 12:10:28 -0400 In-Reply-To: <20181007090337.21037-1-leon@kernel.org> Sender: netdev-owner@vger.kernel.org List-ID: From: Yonatan Cohen Flags sent down from user might not be supported by running driver. This might lead to unwanted bugs. To solve this, added macro to test for unsupported flags. Signed-off-by: Yonatan Cohen Signed-off-by: Leon Romanovsky --- drivers/infiniband/hw/mlx5/qp.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c index bae48bdf281c..17c4b6641933 100644 --- a/drivers/infiniband/hw/mlx5/qp.c +++ b/drivers/infiniband/hw/mlx5/qp.c @@ -1728,6 +1728,15 @@ static void configure_requester_scat_cqe(struct mlx5_ib_dev *dev, MLX5_SET(qpc, qpc, cs_req, MLX5_REQ_SCAT_DATA32_CQE); } +#define MLX5_QP_CREATE_FLAGS_NOT_SUPPORTED(flags) \ + ((flags) & ~( \ + MLX5_QP_FLAG_SIGNATURE | \ + MLX5_QP_FLAG_SCATTER_CQE | \ + MLX5_QP_FLAG_TUNNEL_OFFLOADS | \ + MLX5_QP_FLAG_BFREG_INDEX | \ + MLX5_QP_FLAG_TYPE_DCT | \ + MLX5_QP_FLAG_TYPE_DCI)) + static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd, struct ib_qp_init_attr *init_attr, struct ib_udata *udata, struct mlx5_ib_qp *qp) @@ -1825,6 +1834,9 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd, return -EFAULT; } + if (MLX5_QP_CREATE_FLAGS_NOT_SUPPORTED(ucmd.flags)) + return -EINVAL; + err = get_qp_user_index(to_mucontext(pd->uobject->context), &ucmd, udata->inlen, &uidx); if (err) -- 2.14.4