qp->attrs.rq_size = roundup_pow_of_two(attrs->cap.max_recv_wr);
if (uctx) {
- ret = ib_copy_from_udata(&ureq, udata,
- min(sizeof(ureq), udata->inlen));
+ ret = ib_copy_validate_udata_in(udata, ureq, rsvd0);
if (ret)
goto err_out_xa;
struct erdma_ureq_create_cq ureq;
struct erdma_uresp_create_cq uresp;
- ret = ib_copy_from_udata(&ureq, udata,
- min(udata->inlen, sizeof(ureq)));
+ ret = ib_copy_validate_udata_in(udata, ureq, rsvd0);
if (ret)
goto err_out_xa;
phys_addr_t db_phys = 0;
int rc;
- rc = ib_copy_from_udata(&req, udata, sizeof(req));
+ rc = ib_copy_validate_udata_in(udata, req, rsvd);
if (rc)
return rc;
int udma_idx = 0, rc;
if (udata) {
- rc = ib_copy_from_udata(&req, udata, sizeof(req));
+ rc = ib_copy_validate_udata_in(udata, req, rsvd);
if (rc)
return rc;
}
int rc;
if (udata) {
- rc = ib_copy_from_udata(&req, udata, sizeof(req));
+ rc = ib_copy_validate_udata_in(udata, req, rsvd);
if (rc)
return rc;
} else {
return -EOPNOTSUPP;
if (udata) {
- if (ib_copy_from_udata(&ucmd, udata, sizeof(ucmd)))
- return -EFAULT;
+ err = ib_copy_validate_udata_in(udata, ucmd, db_page);
+ if (err)
+ return err;
err = mthca_map_user_db(to_mdev(ibsrq->device), &context->uar,
context->db_tab, ucmd.db_index,
case IB_QPT_UD:
{
if (udata) {
- if (ib_copy_from_udata(&ucmd, udata, sizeof(ucmd)))
- return -EFAULT;
+ err = ib_copy_validate_udata_in(udata, ucmd, rq_db_index);
+ if (err)
+ return err;
err = mthca_map_user_db(dev, &context->uar,
context->db_tab,
return -EINVAL;
if (udata) {
- if (ib_copy_from_udata(&ucmd, udata, sizeof(ucmd)))
- return -EFAULT;
+ err = ib_copy_validate_udata_in(udata, ucmd, set_db_index);
+ if (err)
+ return err;
err = mthca_map_user_db(to_mdev(ibdev), &context->uar,
context->db_tab, ucmd.set_db_index,
goto out;
lkey = cq->resize_buf->buf.mr.ibmr.lkey;
} else {
- if (ib_copy_from_udata(&ucmd, udata, sizeof ucmd)) {
- ret = -EFAULT;
+ ret = ib_copy_validate_udata_in(udata, ucmd, reserved);
+ if (ret)
goto out;
- }
lkey = ucmd.lkey;
}
}
++context->reg_mr_warned;
ucmd.mr_attrs = 0;
- } else if (ib_copy_from_udata(&ucmd, udata, sizeof ucmd))
- return ERR_PTR(-EFAULT);
+ } else {
+ err = ib_copy_validate_udata_in(udata, ucmd, reserved);
+ if (err)
+ return ERR_PTR(err);
+ }
mr = kmalloc_obj(*mr);
if (!mr)
return -EOPNOTSUPP;
if (udata) {
- if (ib_copy_from_udata(&ureq, udata, sizeof(ureq)))
- return -EFAULT;
+ status = ib_copy_validate_udata_in(udata, ureq, rsvd);
+ if (status)
+ return status;
} else
ureq.dpp_cq = 0;
memset(&ureq, 0, sizeof(ureq));
if (udata) {
- if (ib_copy_from_udata(&ureq, udata, sizeof(ureq)))
- return -EFAULT;
+ status = ib_copy_validate_udata_in(udata, ureq, rsvd1);
+ if (status)
+ return status;
}
ocrdma_set_qp_init_params(qp, pd, attrs);
if (udata == NULL)
return -EFAULT;
if (udata->inlen) {
- rc = ib_copy_from_udata(&ureq, udata,
- min(sizeof(ureq), udata->inlen));
- if (rc) {
- DP_ERR(dev, "Problem copying data from user space\n");
- return -EFAULT;
- }
+ rc = ib_copy_validate_udata_in(udata, ureq, reserved);
+ if (rc)
+ return rc;
ctx->edpm_mode = !!(ureq.context_flags &
QEDR_ALLOC_UCTX_EDPM_MODE);
ctx->db_rec = !!(ureq.context_flags & QEDR_ALLOC_UCTX_DB_REC);
db_offset = DB_ADDR_SHIFT(DQ_PWM_OFFSET_UCM_RDMA_CQ_CONS_32BIT);
if (udata) {
- if (ib_copy_from_udata(&ureq, udata, min(sizeof(ureq),
- udata->inlen))) {
- DP_ERR(dev,
- "create cq: problem copying data from user space\n");
- goto err0;
- }
+ rc = ib_copy_validate_udata_in(udata, ureq, len);
+ if (rc)
+ return rc;
if (!ureq.len) {
DP_ERR(dev,
hw_srq->max_sges = init_attr->attr.max_sge;
if (udata) {
- if (ib_copy_from_udata(&ureq, udata, min(sizeof(ureq),
- udata->inlen))) {
- DP_ERR(dev,
- "create srq: problem copying data from user space\n");
- goto err0;
- }
+ rc = ib_copy_validate_udata_in(udata, ureq, srq_len);
+ if (rc)
+ return rc;
rc = qedr_init_srq_user_params(udata, srq, &ureq, 0);
if (rc)
}
if (udata) {
- rc = ib_copy_from_udata(&ureq, udata, min(sizeof(ureq),
- udata->inlen));
- if (rc) {
- DP_ERR(dev, "Problem copying data from user space\n");
+ rc = ib_copy_validate_udata_in(udata, ureq, rq_len);
+ if (rc)
return rc;
- }
}
if (qedr_qp_has_sq(qp)) {
if (init_attr->create_flags)
return -EOPNOTSUPP;
- err = ib_copy_from_udata(&cmd, udata, sizeof(cmd));
+ err = ib_copy_validate_udata_in(udata, cmd, spec);
if (err) {
usnic_err("%s: cannot copy udata for create_qp\n",
dev_name(&us_ibdev->ib_dev.dev));
#include <rdma/ib_addr.h>
#include <rdma/ib_smi.h>
#include <rdma/ib_user_verbs.h>
+#include <rdma/uverbs_ioctl.h>
#include "pvrdma.h"
dev_dbg(&dev->pdev->dev,
"create queuepair from user space\n");
- if (ib_copy_from_udata(&ucmd, udata, sizeof(ucmd))) {
- ret = -EFAULT;
+ ret = ib_copy_validate_udata_in(udata, ucmd, qp_addr);
+ if (ret)
goto err_qp;
- }
/* Userspace supports qpn and qp handles? */
if (dev->dsr_version >= PVRDMA_QPHANDLE_VERSION &&
#include <rdma/ib_addr.h>
#include <rdma/ib_smi.h>
#include <rdma/ib_user_verbs.h>
+#include <rdma/uverbs_ioctl.h>
#include "pvrdma.h"
dev_dbg(&dev->pdev->dev,
"create shared receive queue from user space\n");
- if (ib_copy_from_udata(&ucmd, udata, sizeof(ucmd))) {
- ret = -EFAULT;
+ ret = ib_copy_validate_udata_in(udata, ucmd, reserved);
+ if (ret)
goto err_srq;
- }
srq->umem = ib_umem_get(ibsrq->device, ucmd.buf_addr, ucmd.buf_size, 0);
if (IS_ERR(srq->umem)) {