Skip to content

Commit

Permalink
IB/core: Add ib_is_udata_cleared
Browse files Browse the repository at this point in the history
Extending core and vendor verb commands require us to check that the
unknown part of the user's given command is all zeros.
Adding ib_is_udata_cleared in order to do so.

Signed-off-by: Matan Barak <matanb@mellanox.com>
Reviewed-by: Haggai Eran <haggaie@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
  • Loading branch information
Matan Barak authored and Doug Ledford committed Dec 24, 2015
1 parent 972ecb8 commit 301a721
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions include/rdma/ib_verbs.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@
#include <uapi/linux/if_ether.h>
#include <net/ipv6.h>
#include <net/ip.h>
#include <linux/string.h>
#include <linux/slab.h>

#include <linux/atomic.h>
#include <linux/mmu_notifier.h>
Expand Down Expand Up @@ -1922,6 +1924,31 @@ static inline int ib_copy_to_udata(struct ib_udata *udata, void *src, size_t len
return copy_to_user(udata->outbuf, src, len) ? -EFAULT : 0;
}

static inline bool ib_is_udata_cleared(struct ib_udata *udata,
size_t offset,
size_t len)
{
const void __user *p = udata->inbuf + offset;
bool ret = false;
u8 *buf;

if (len > USHRT_MAX)
return false;

buf = kmalloc(len, GFP_KERNEL);
if (!buf)
return false;

if (copy_from_user(buf, p, len))
goto free;

ret = !memchr_inv(buf, 0, len);

free:
kfree(buf);
return ret;
}

/**
* ib_modify_qp_is_ok - Check that the supplied attribute mask
* contains all required attributes and no attributes not allowed for
Expand Down

0 comments on commit 301a721

Please sign in to comment.