aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYonatan Cohen <yonatanc@mellanox.com>2018-10-09 05:05:14 -0400
committerDoug Ledford <dledford@redhat.com>2018-10-17 11:25:41 -0400
commit2e43bb31b8df662f591a7e80270ca3acda44bb48 (patch)
tree432a6d027e24fe9656b0b59425f34a969e614b98
parent5d6ff1babe78034f0cf8e5f7bf312a257e5574cc (diff)
IB/mlx5: Verify that driver supports user flags
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 <yonatanc@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r--drivers/infiniband/hw/mlx5/qp.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
index 817c391bdfc0..5b1811be6677 100644
--- a/drivers/infiniband/hw/mlx5/qp.c
+++ b/drivers/infiniband/hw/mlx5/qp.c
@@ -1728,6 +1728,11 @@ static void configure_requester_scat_cqe(struct mlx5_ib_dev *dev,
1728 MLX5_SET(qpc, qpc, cs_req, MLX5_REQ_SCAT_DATA32_CQE); 1728 MLX5_SET(qpc, qpc, cs_req, MLX5_REQ_SCAT_DATA32_CQE);
1729} 1729}
1730 1730
1731static inline bool check_flags_mask(uint64_t input, uint64_t supported)
1732{
1733 return (input & ~supported) == 0;
1734}
1735
1731static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd, 1736static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
1732 struct ib_qp_init_attr *init_attr, 1737 struct ib_qp_init_attr *init_attr,
1733 struct ib_udata *udata, struct mlx5_ib_qp *qp) 1738 struct ib_udata *udata, struct mlx5_ib_qp *qp)
@@ -1825,6 +1830,15 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
1825 return -EFAULT; 1830 return -EFAULT;
1826 } 1831 }
1827 1832
1833 if (!check_flags_mask(ucmd.flags,
1834 MLX5_QP_FLAG_SIGNATURE |
1835 MLX5_QP_FLAG_SCATTER_CQE |
1836 MLX5_QP_FLAG_TUNNEL_OFFLOADS |
1837 MLX5_QP_FLAG_BFREG_INDEX |
1838 MLX5_QP_FLAG_TYPE_DCT |
1839 MLX5_QP_FLAG_TYPE_DCI))
1840 return -EINVAL;
1841
1828 err = get_qp_user_index(to_mucontext(pd->uobject->context), 1842 err = get_qp_user_index(to_mucontext(pd->uobject->context),
1829 &ucmd, udata->inlen, &uidx); 1843 &ucmd, udata->inlen, &uidx);
1830 if (err) 1844 if (err)