summaryrefslogtreecommitdiff
path: root/drivers/infiniband
diff options
context:
space:
mode:
authorJason Gunthorpe <jgg@nvidia.com>2026-03-25 18:26:53 -0300
committerLeon Romanovsky <leonro@nvidia.com>2026-03-31 03:11:01 -0400
commit530b251b0f7a44d10bc493d970fa3663962ba16f (patch)
tree9bcd0e35f1db12c648f42ecf43bbadd9e0127964 /drivers/infiniband
parentc8f9a7a96e9a95e7b2bc3cc95371e0d75a5872ec (diff)
downloadlwn-530b251b0f7a44d10bc493d970fa3663962ba16f.tar.gz
lwn-530b251b0f7a44d10bc493d970fa3663962ba16f.zip
RDMA/mlx5: Use ib_copy_validate_udata_in() for MW
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>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/hw/mlx5/mr.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c
index cbe34251e340..3ef467ac9e3d 100644
--- a/drivers/infiniband/hw/mlx5/mr.c
+++ b/drivers/infiniband/hw/mlx5/mr.c
@@ -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);