IB/mlx5: add missing padding at end of struct mlx5_ib_create_cq
[cascardo/linux.git] / drivers / infiniband / hw / mlx5 / cq.c
index 62bb6b4..8ae4f89 100644 (file)
@@ -32,6 +32,7 @@
 
 #include <linux/kref.h>
 #include <rdma/ib_umem.h>
+#include <rdma/ib_user_verbs.h>
 #include "mlx5_ib.h"
 #include "user.h"
 
@@ -602,14 +603,24 @@ static int create_cq_user(struct mlx5_ib_dev *dev, struct ib_udata *udata,
                          int *cqe_size, int *index, int *inlen)
 {
        struct mlx5_ib_create_cq ucmd;
+       size_t ucmdlen;
        int page_shift;
        int npages;
        int ncont;
        int err;
 
-       if (ib_copy_from_udata(&ucmd, udata, sizeof(ucmd)))
+       ucmdlen =
+               (udata->inlen - sizeof(struct ib_uverbs_cmd_hdr) <
+                sizeof(ucmd)) ? (sizeof(ucmd) -
+                                 sizeof(ucmd.reserved)) : sizeof(ucmd);
+
+       if (ib_copy_from_udata(&ucmd, udata, ucmdlen))
                return -EFAULT;
 
+       if (ucmdlen == sizeof(ucmd) &&
+           ucmd.reserved != 0)
+               return -EINVAL;
+
        if (ucmd.cqe_size != 64 && ucmd.cqe_size != 128)
                return -EINVAL;