Skip to content

Commit e910d98

Browse files
jgunthorperleon
authored andcommitted
RDMA: Consolidate patterns with sizeof() to ib_copy_validate_udata_in()
Similar to the prior patch, these patterns are open coding an offsetofend() using sizeof(), which targets the last member of the current struct. Reviewed-by: Long Li <longli@microsoft.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Reviewed-by: Bernard Metzler <bernard.metzler@linux.dev> Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
1 parent 8d7573b commit e910d98

6 files changed

Lines changed: 17 additions & 47 deletions

File tree

drivers/infiniband/hw/mana/qp.c

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -95,16 +95,12 @@ static int mana_ib_create_qp_rss(struct ib_qp *ibqp, struct ib_pd *pd,
9595
u32 port;
9696
int ret;
9797

98-
if (!udata || udata->inlen < sizeof(ucmd))
98+
if (!udata)
9999
return -EINVAL;
100100

101-
ret = ib_copy_from_udata(&ucmd, udata, min(sizeof(ucmd), udata->inlen));
102-
if (ret) {
103-
ibdev_dbg(&mdev->ib_dev,
104-
"Failed copy from udata for create rss-qp, err %d\n",
105-
ret);
101+
ret = ib_copy_validate_udata_in(udata, ucmd, port);
102+
if (ret)
106103
return ret;
107-
}
108104

109105
if (attr->cap.max_recv_wr > mdev->adapter_caps.max_qp_wr) {
110106
ibdev_dbg(&mdev->ib_dev,
@@ -266,15 +262,12 @@ static int mana_ib_create_qp_raw(struct ib_qp *ibqp, struct ib_pd *ibpd,
266262
u32 port;
267263
int err;
268264

269-
if (!mana_ucontext || udata->inlen < sizeof(ucmd))
265+
if (!mana_ucontext)
270266
return -EINVAL;
271267

272-
err = ib_copy_from_udata(&ucmd, udata, min(sizeof(ucmd), udata->inlen));
273-
if (err) {
274-
ibdev_dbg(&mdev->ib_dev,
275-
"Failed to copy from udata create qp-raw, %d\n", err);
268+
err = ib_copy_validate_udata_in(udata, ucmd, port);
269+
if (err)
276270
return err;
277-
}
278271

279272
if (attr->cap.max_send_wr > mdev->adapter_caps.max_qp_wr) {
280273
ibdev_dbg(&mdev->ib_dev,
@@ -519,17 +512,15 @@ static int mana_ib_create_rc_qp(struct ib_qp *ibqp, struct ib_pd *ibpd,
519512
u64 flags = 0;
520513
u32 doorbell;
521514

522-
if (!udata || udata->inlen < sizeof(ucmd))
515+
if (!udata)
523516
return -EINVAL;
524517

525518
mana_ucontext = rdma_udata_to_drv_context(udata, struct mana_ib_ucontext, ibucontext);
526519
doorbell = mana_ucontext->doorbell;
527520
flags = MANA_RC_FLAG_NO_FMR;
528-
err = ib_copy_from_udata(&ucmd, udata, min(sizeof(ucmd), udata->inlen));
529-
if (err) {
530-
ibdev_dbg(&mdev->ib_dev, "Failed to copy from udata, %d\n", err);
521+
err = ib_copy_validate_udata_in(udata, ucmd, queue_size);
522+
if (err)
531523
return err;
532-
}
533524

534525
for (i = 0, j = 0; i < MANA_RC_QUEUE_TYPE_MAX; ++i) {
535526
/* skip FMR for user-level RC QPs */

drivers/infiniband/hw/mana/wq.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,9 @@ struct ib_wq *mana_ib_create_wq(struct ib_pd *pd,
1515
struct mana_ib_wq *wq;
1616
int err;
1717

18-
if (udata->inlen < sizeof(ucmd))
19-
return ERR_PTR(-EINVAL);
20-
21-
err = ib_copy_from_udata(&ucmd, udata, min(sizeof(ucmd), udata->inlen));
22-
if (err) {
23-
ibdev_dbg(&mdev->ib_dev,
24-
"Failed to copy from udata for create wq, %d\n", err);
18+
err = ib_copy_validate_udata_in(udata, ucmd, reserved);
19+
if (err)
2520
return ERR_PTR(err);
26-
}
2721

2822
wq = kzalloc_obj(*wq);
2923
if (!wq)

drivers/infiniband/hw/mlx4/main.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
#include <rdma/ib_user_verbs.h>
5151
#include <rdma/ib_addr.h>
5252
#include <rdma/ib_cache.h>
53+
#include <rdma/uverbs_ioctl.h>
5354

5455
#include <net/bonding.h>
5556

@@ -445,10 +446,7 @@ static int mlx4_ib_query_device(struct ib_device *ibdev,
445446
struct mlx4_clock_params clock_params;
446447

447448
if (uhw->inlen) {
448-
if (uhw->inlen < sizeof(cmd))
449-
return -EINVAL;
450-
451-
err = ib_copy_from_udata(&cmd, uhw, sizeof(cmd));
449+
err = ib_copy_validate_udata_in(uhw, cmd, reserved);
452450
if (err)
453451
return err;
454452

drivers/infiniband/hw/mlx5/cq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1229,7 +1229,7 @@ static int resize_user(struct mlx5_ib_dev *dev, struct mlx5_ib_cq *cq,
12291229
struct ib_umem *umem;
12301230
int err;
12311231

1232-
err = ib_copy_from_udata(&ucmd, udata, sizeof(ucmd));
1232+
err = ib_copy_validate_udata_in(udata, ucmd, reserved1);
12331233
if (err)
12341234
return err;
12351235

drivers/infiniband/sw/rxe/rxe_verbs.c

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -452,18 +452,9 @@ static int rxe_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
452452
int err;
453453

454454
if (udata) {
455-
if (udata->inlen < sizeof(cmd)) {
456-
err = -EINVAL;
457-
rxe_dbg_srq(srq, "malformed udata\n");
458-
goto err_out;
459-
}
460-
461-
err = ib_copy_from_udata(&cmd, udata, sizeof(cmd));
462-
if (err) {
463-
err = -EFAULT;
464-
rxe_dbg_srq(srq, "unable to read udata\n");
455+
err = ib_copy_validate_udata_in(udata, cmd, mmap_info_addr);
456+
if (err)
465457
goto err_out;
466-
}
467458
}
468459

469460
err = rxe_srq_chk_attr(rxe, srq, attr, mask);

drivers/infiniband/sw/siw/siw_verbs.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1373,11 +1373,7 @@ struct ib_mr *siw_reg_user_mr(struct ib_pd *pd, u64 start, u64 len,
13731373
struct siw_uresp_reg_mr uresp = {};
13741374
struct siw_mem *mem = mr->mem;
13751375

1376-
if (udata->inlen < sizeof(ureq)) {
1377-
rv = -EINVAL;
1378-
goto err_out;
1379-
}
1380-
rv = ib_copy_from_udata(&ureq, udata, sizeof(ureq));
1376+
rv = ib_copy_validate_udata_in(udata, ureq, pad);
13811377
if (rv)
13821378
goto err_out;
13831379

0 commit comments

Comments
 (0)