struct ib_mr *mr;
int ret;
- if (out_len < sizeof resp)
+ if (out_len < sizeof(resp)) {
+ pr_debug("ib_uverbs_reg_mr: command output length too short\n");
return -ENOSPC;
+ }
if (copy_from_user(&cmd, buf, sizeof cmd))
return -EFAULT;
(unsigned long) cmd.response + sizeof resp,
in_len - sizeof cmd, out_len - sizeof resp);
- if ((cmd.start & ~PAGE_MASK) != (cmd.hca_va & ~PAGE_MASK))
+ if ((cmd.start & ~PAGE_MASK) != (cmd.hca_va & ~PAGE_MASK)) {
+ pr_debug("ib_uverbs_reg_mr: HCA virtual address doesn't match host address\n");
return -EINVAL;
+ }
ret = ib_check_mr_access(cmd.access_flags);
if (ret)
pd = idr_read_pd(cmd.pd_handle, file->ucontext);
if (!pd) {
+ pr_debug("ib_uverbs_reg_mr: invalid PD\n");
ret = -EINVAL;
goto err_free;
}
#if !defined(IB_VERBS_H)
#define IB_VERBS_H
+#ifdef pr_fmt
+#undef pr_fmt
+#endif
+#define pr_fmt(fmt) fmt
+
#include <linux/types.h>
#include <linux/device.h>
#include <linux/mm.h>
* remote atomic permission is also requested.
*/
if (flags & (IB_ACCESS_REMOTE_ATOMIC | IB_ACCESS_REMOTE_WRITE) &&
- !(flags & IB_ACCESS_LOCAL_WRITE))
+ !(flags & IB_ACCESS_LOCAL_WRITE)) {
+ pr_debug("ib_check_mr_access: MR must have local write permission if remote write is allowed. flags=0x%x\n"
+ , flags);
return -EINVAL;
+ }
return 0;
}