RDMA: Remove uverbs cmds from drivers that don't use them
authorJason Gunthorpe <jgg@nvidia.com>
Sat, 3 Oct 2020 23:20:10 +0000 (20:20 -0300)
committerJason Gunthorpe <jgg@nvidia.com>
Mon, 26 Oct 2020 22:28:00 +0000 (19:28 -0300)
Allowing userspace to invoke these commands is probably going to crash
these drivers as they are not tested and not expecting to use them on a
user object.

For example pvrdma touches cq->ring_state which is not initialized for
user QPs.

These commands are effected:

- IB_USER_VERBS_CMD_REQ_NOTIFY_CQ is ibv_cmd_req_notify_cq() in
  rdma-core, only hfi1, ipath and rxe calls it.

- IB_USER_VERBS_CMD_POLL_CQ is ibv_cmd_poll_cq() in rdma-core, only
  ipath and hfi1 calls it.

- IB_USER_VERBS_CMD_POST_SEND/RECV is ibv_cmd_post_send/recv() in
  rdma-core, only ipath and hfi1 call them.

- IB_USER_VERBS_CMD_POST_SRQ_RECV is ibv_cmd_post_srq_recv() in
  rdma-core, only ipath and hfi1 calls it.

- IB_USER_VERBS_CMD_PEEK_CQ isn't even implemented anywhere

- IB_USER_VERBS_CMD_CREATE/DESTROY_AH is ibv_cmd_create/destroy_ah() in
  rdma-core, only bnxt_re, efa, hfi1, ipath, mlx5, orcrdma, and rxe call
  it.

Link: https://lore.kernel.org/r/10-v1-caa70ba3d1ab+1436e-ucmd_mask_jgg@nvidia.com
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/cxgb4/provider.c
drivers/infiniband/hw/hns/hns_roce_main.c
drivers/infiniband/hw/i40iw/i40iw_verbs.c
drivers/infiniband/hw/ocrdma/ocrdma_main.c
drivers/infiniband/hw/qedr/main.c
drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
drivers/infiniband/sw/rxe/rxe_verbs.c
drivers/infiniband/sw/siw/siw_main.c

index 627967d..8a3c0a0 100644 (file)
@@ -531,11 +531,6 @@ void c4iw_register_device(struct work_struct *work)
        if (fastreg_support)
                dev->device_cap_flags |= IB_DEVICE_MEM_MGT_EXTENSIONS;
        dev->ibdev.local_dma_lkey = 0;
-       dev->ibdev.uverbs_cmd_mask |=
-           (1ull << IB_USER_VERBS_CMD_REQ_NOTIFY_CQ) |
-           (1ull << IB_USER_VERBS_CMD_POLL_CQ) |
-           (1ull << IB_USER_VERBS_CMD_POST_SEND) |
-           (1ull << IB_USER_VERBS_CMD_POST_RECV);
        dev->ibdev.node_type = RDMA_NODE_RNIC;
        BUILD_BUG_ON(sizeof(C4IW_NODE_DESC) > IB_DEVICE_NODE_DESC_MAX);
        memcpy(dev->ibdev.node_desc, C4IW_NODE_DESC, sizeof(C4IW_NODE_DESC));
index a56de14..6d2c383 100644 (file)
@@ -505,8 +505,6 @@ static int hns_roce_register_device(struct hns_roce_dev *hr_dev)
 
        /* SRQ */
        if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_SRQ) {
-               ib_dev->uverbs_cmd_mask |=
-                               (1ULL << IB_USER_VERBS_CMD_POST_SRQ_RECV);
                ib_set_device_ops(ib_dev, &hns_roce_dev_srq_ops);
                ib_set_device_ops(ib_dev, hr_dev->hw->hns_roce_dev_srq_ops);
        }
index db81f39..85d4068 100644 (file)
@@ -2690,13 +2690,6 @@ static struct i40iw_ib_device *i40iw_init_rdma_device(struct i40iw_device *iwdev
        iwibdev->ibdev.node_type = RDMA_NODE_RNIC;
        ether_addr_copy((u8 *)&iwibdev->ibdev.node_guid, netdev->dev_addr);
 
-       iwibdev->ibdev.uverbs_cmd_mask |=
-           (1ull << IB_USER_VERBS_CMD_REQ_NOTIFY_CQ) |
-           (1ull << IB_USER_VERBS_CMD_POLL_CQ) |
-           (1ull << IB_USER_VERBS_CMD_CREATE_AH) |
-           (1ull << IB_USER_VERBS_CMD_DESTROY_AH) |
-           (1ull << IB_USER_VERBS_CMD_POST_RECV) |
-           (1ull << IB_USER_VERBS_CMD_POST_SEND);
        iwibdev->ibdev.phys_port_cnt = 1;
        iwibdev->ibdev.num_comp_vectors = iwdev->ceqs_count;
        iwibdev->ibdev.dev.parent = &pcidev->dev;
index b5c8b5a..5e67cd6 100644 (file)
@@ -204,11 +204,6 @@ static int ocrdma_register_device(struct ocrdma_dev *dev)
        BUILD_BUG_ON(sizeof(OCRDMA_NODE_DESC) > IB_DEVICE_NODE_DESC_MAX);
        memcpy(dev->ibdev.node_desc, OCRDMA_NODE_DESC,
               sizeof(OCRDMA_NODE_DESC));
-       dev->ibdev.uverbs_cmd_mask |=
-           OCRDMA_UVERBS(REQ_NOTIFY_CQ) |
-           OCRDMA_UVERBS(POLL_CQ) |
-           OCRDMA_UVERBS(POST_SEND) |
-           OCRDMA_UVERBS(POST_RECV);
 
        dev->ibdev.uverbs_cmd_mask |=
            OCRDMA_UVERBS(CREATE_AH) |
@@ -225,12 +220,9 @@ static int ocrdma_register_device(struct ocrdma_dev *dev)
 
        ib_set_device_ops(&dev->ibdev, &ocrdma_dev_ops);
 
-       if (ocrdma_get_asic_type(dev) == OCRDMA_ASIC_GEN_SKH_R) {
-               dev->ibdev.uverbs_cmd_mask |=
-                    OCRDMA_UVERBS(POST_SRQ_RECV);
-
+       if (ocrdma_get_asic_type(dev) == OCRDMA_ASIC_GEN_SKH_R)
                ib_set_device_ops(&dev->ibdev, &ocrdma_dev_srq_ops);
-       }
+
        rdma_set_device_sysfs_group(&dev->ibdev, &ocrdma_attr_group);
        ret = ib_device_set_netdev(&dev->ibdev, dev->nic_info.netdev, 1);
        if (ret)
index f3a5946..cc711c6 100644 (file)
@@ -245,13 +245,6 @@ static int qedr_register_device(struct qedr_dev *dev)
        dev->ibdev.node_guid = dev->attr.node_guid;
        memcpy(dev->ibdev.node_desc, QEDR_NODE_DESC, sizeof(QEDR_NODE_DESC));
 
-       dev->ibdev.uverbs_cmd_mask |=
-                                    QEDR_UVERBS(REQ_NOTIFY_CQ) |
-                                    QEDR_UVERBS(POST_SRQ_RECV) |
-                                    QEDR_UVERBS(POLL_CQ) |
-                                    QEDR_UVERBS(POST_SEND) |
-                                    QEDR_UVERBS(POST_RECV);
-
        if (IS_IWARP(dev)) {
                rc = qedr_iw_register_device(dev);
                if (rc)
index 798e9a4..a86b4f7 100644 (file)
@@ -205,13 +205,6 @@ static int pvrdma_register_device(struct pvrdma_dev *dev)
        dev->flags = 0;
        dev->ib_dev.num_comp_vectors = 1;
        dev->ib_dev.dev.parent = &dev->pdev->dev;
-       dev->ib_dev.uverbs_cmd_mask |=
-               (1ull << IB_USER_VERBS_CMD_POLL_CQ)             |
-               (1ull << IB_USER_VERBS_CMD_REQ_NOTIFY_CQ)       |
-               (1ull << IB_USER_VERBS_CMD_POST_SEND)           |
-               (1ull << IB_USER_VERBS_CMD_POST_RECV)           |
-               (1ull << IB_USER_VERBS_CMD_CREATE_AH)           |
-               (1ull << IB_USER_VERBS_CMD_DESTROY_AH);
 
        dev->ib_dev.node_type = RDMA_NODE_IB_CA;
        dev->ib_dev.phys_port_cnt = dev->dsr->caps.phys_port_cnt;
@@ -235,9 +228,6 @@ static int pvrdma_register_device(struct pvrdma_dev *dev)
 
        /* Check if SRQ is supported by backend */
        if (dev->dsr->caps.max_srq) {
-               dev->ib_dev.uverbs_cmd_mask |=
-                       (1ull << IB_USER_VERBS_CMD_POST_SRQ_RECV);
-
                ib_set_device_ops(&dev->ib_dev, &pvrdma_dev_srq_ops);
 
                dev->srq_tbl = kcalloc(dev->dsr->caps.max_srq,
index 21d2ab3..b3323c3 100644 (file)
@@ -1142,12 +1142,7 @@ int rxe_register_device(struct rxe_dev *rxe, const char *ibdev_name)
        dma_set_coherent_mask(&dev->dev, dma_get_required_mask(&dev->dev));
 
        dev->uverbs_cmd_mask |=
-           BIT_ULL(IB_USER_VERBS_CMD_POST_SRQ_RECV)
-           | BIT_ULL(IB_USER_VERBS_CMD_POST_SEND)
-           | BIT_ULL(IB_USER_VERBS_CMD_POST_RECV)
-           | BIT_ULL(IB_USER_VERBS_CMD_POLL_CQ)
-           | BIT_ULL(IB_USER_VERBS_CMD_PEEK_CQ)
-           | BIT_ULL(IB_USER_VERBS_CMD_REQ_NOTIFY_CQ)
+           BIT_ULL(IB_USER_VERBS_CMD_REQ_NOTIFY_CQ)
            | BIT_ULL(IB_USER_VERBS_CMD_CREATE_AH)
            | BIT_ULL(IB_USER_VERBS_CMD_MODIFY_AH)
            | BIT_ULL(IB_USER_VERBS_CMD_QUERY_AH)
index 2efe83a..e49faef 100644 (file)
@@ -346,12 +346,6 @@ static struct siw_device *siw_device_create(struct net_device *netdev)
                addrconf_addr_eui48((unsigned char *)&base_dev->node_guid,
                                    addr);
        }
-       base_dev->uverbs_cmd_mask |=
-               (1ull << IB_USER_VERBS_CMD_POLL_CQ) |
-               (1ull << IB_USER_VERBS_CMD_REQ_NOTIFY_CQ) |
-               (1ull << IB_USER_VERBS_CMD_POST_SEND) |
-               (1ull << IB_USER_VERBS_CMD_POST_RECV) |
-               (1ull << IB_USER_VERBS_CMD_POST_SRQ_RECV);
 
        base_dev->node_type = RDMA_NODE_RNIC;
        memcpy(base_dev->node_desc, SIW_NODE_DESC_COMMON,