]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/mlx5: Use ib_copy_validate_udata_in() for MW
authorJason Gunthorpe <jgg@nvidia.com>
Wed, 25 Mar 2026 21:26:53 +0000 (18:26 -0300)
committerLeon Romanovsky <leonro@nvidia.com>
Tue, 31 Mar 2026 07:11:01 +0000 (03:11 -0400)
The userspace side on MW made a mistake and never actually used the udata
driver structure that was defined so it always passes 0 length. Keep the
kernel structure but this conversion has to permit 0 length as well.

Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
drivers/infiniband/hw/mlx5/mr.c

index cbe34251e340b96abb9c191da7a8c3be71d1ae3b..3ef467ac9e3d1566d2e06f25a415afec9488d1aa 100644 (file)
@@ -1774,16 +1774,13 @@ int mlx5_ib_alloc_mw(struct ib_mw *ibmw, struct ib_udata *udata)
                __u32   response_length;
        } resp = {};
 
-       err = ib_copy_from_udata(&req, udata, min(udata->inlen, sizeof(req)));
-       if (err)
-               return err;
-
-       if (req.comp_mask || req.reserved1 || req.reserved2)
-               return -EOPNOTSUPP;
+       if (udata->inlen) {
+               err = ib_copy_validate_udata_in_cm(udata, req, reserved2, 0);
+               if (err)
+                       return err;
+       }
 
-       if (udata->inlen > sizeof(req) &&
-           !ib_is_udata_cleared(udata, sizeof(req),
-                                udata->inlen - sizeof(req)))
+       if (req.reserved1 || req.reserved2)
                return -EOPNOTSUPP;
 
        ndescs = req.num_klms ? roundup(req.num_klms, 4) : roundup(1, 4);