Similar to the prior patch, these patterns are open coding an
offsetofend(). The use of offsetof() targets the prior field as the
last field in the struct.

Signed-off-by: Jason Gunthorpe <[email protected]>
---
 drivers/infiniband/hw/mana/cq.c |  9 ++-------
 drivers/infiniband/hw/mlx5/cq.c | 10 +++-------
 2 files changed, 5 insertions(+), 14 deletions(-)

diff --git a/drivers/infiniband/hw/mana/cq.c b/drivers/infiniband/hw/mana/cq.c
index b2749f971cd0af..3f932ef6e5fff6 100644
--- a/drivers/infiniband/hw/mana/cq.c
+++ b/drivers/infiniband/hw/mana/cq.c
@@ -27,14 +27,9 @@ int mana_ib_create_cq(struct ib_cq *ibcq, const struct 
ib_cq_init_attr *attr,
        is_rnic_cq = mana_ib_is_rnic(mdev);
 
        if (udata) {
-               if (udata->inlen < offsetof(struct mana_ib_create_cq, flags))
-                       return -EINVAL;
-
-               err = ib_copy_from_udata(&ucmd, udata, min(sizeof(ucmd), 
udata->inlen));
-               if (err) {
-                       ibdev_dbg(ibdev, "Failed to copy from udata for create 
cq, %d\n", err);
+               err = ib_copy_validate_udata_in(udata, ucmd, buf_addr);
+               if (err)
                        return err;
-               }
 
                if ((!is_rnic_cq && attr->cqe > mdev->adapter_caps.max_qp_wr) ||
                    attr->cqe > U32_MAX / COMP_ENTRY_SIZE) {
diff --git a/drivers/infiniband/hw/mlx5/cq.c b/drivers/infiniband/hw/mlx5/cq.c
index 43a7b5ca49dcc9..643b3b7d387834 100644
--- a/drivers/infiniband/hw/mlx5/cq.c
+++ b/drivers/infiniband/hw/mlx5/cq.c
@@ -723,7 +723,6 @@ static int create_cq_user(struct mlx5_ib_dev *dev, struct 
ib_udata *udata,
        struct mlx5_ib_create_cq ucmd = {};
        unsigned long page_size;
        unsigned int page_offset_quantized;
-       size_t ucmdlen;
        __be64 *pas;
        int ncont;
        void *cqc;
@@ -731,12 +730,9 @@ static int create_cq_user(struct mlx5_ib_dev *dev, struct 
ib_udata *udata,
        struct mlx5_ib_ucontext *context = rdma_udata_to_drv_context(
                udata, struct mlx5_ib_ucontext, ibucontext);
 
-       ucmdlen = min(udata->inlen, sizeof(ucmd));
-       if (ucmdlen < offsetof(struct mlx5_ib_create_cq, flags))
-               return -EINVAL;
-
-       if (ib_copy_from_udata(&ucmd, udata, ucmdlen))
-               return -EFAULT;
+       err = ib_copy_validate_udata_in(udata, ucmd, cqe_comp_res_format);
+       if (err)
+               return err;
 
        if ((ucmd.flags & ~(MLX5_IB_CREATE_CQ_FLAGS_CQE_128B_PAD |
                            MLX5_IB_CREATE_CQ_FLAGS_UAR_PAGE_INDEX |
-- 
2.43.0


Reply via email to