RDMA/uverbs: Ensure validity of current QP state value
authorLeon Romanovsky <leonro@mellanox.com>
Sun, 11 Mar 2018 11:51:33 +0000 (13:51 +0200)
committerDoug Ledford <dledford@redhat.com>
Wed, 14 Mar 2018 19:34:25 +0000 (15:34 -0400)
The QP state is internal enum which is checked at the driver
level by calling to ib_modify_qp_is_ok(). Move this check closer
to user and leave kernel users to be checked by compiler.

Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/core/uverbs_cmd.c

index 9f9fc14523dbf12133b410ead0150d3d2f449b02..33c7f1290adbd04035a19908289daa122f3b05a1 100644 (file)
@@ -1991,6 +1991,13 @@ static int modify_qp(struct ib_uverbs_file *file,
                goto release_qp;
        }
 
+       if ((cmd->base.attr_mask & IB_QP_CUR_STATE &&
+           cmd->base.cur_qp_state > IB_QPS_ERR) ||
+           cmd->base.qp_state > IB_QPS_ERR) {
+               ret = -EINVAL;
+               goto release_qp;
+       }
+
        attr->qp_state            = cmd->base.qp_state;
        attr->cur_qp_state        = cmd->base.cur_qp_state;
        attr->path_mtu            = cmd->base.path_mtu;