|
|
@@ -689,6 +689,7 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
|
|
|
struct ib_uverbs_file *file = filp->private_data;
|
|
|
struct ib_device *ib_dev;
|
|
|
struct ib_uverbs_cmd_hdr hdr;
|
|
|
+ __u32 command;
|
|
|
__u32 flags;
|
|
|
int srcu_key;
|
|
|
ssize_t ret;
|
|
|
@@ -707,20 +708,18 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
+ if (hdr.command & ~(__u32)(IB_USER_VERBS_CMD_FLAGS_MASK |
|
|
|
+ IB_USER_VERBS_CMD_COMMAND_MASK)) {
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
+ command = hdr.command & IB_USER_VERBS_CMD_COMMAND_MASK;
|
|
|
+
|
|
|
flags = (hdr.command &
|
|
|
IB_USER_VERBS_CMD_FLAGS_MASK) >> IB_USER_VERBS_CMD_FLAGS_SHIFT;
|
|
|
|
|
|
if (!flags) {
|
|
|
- __u32 command;
|
|
|
-
|
|
|
- if (hdr.command & ~(__u32)(IB_USER_VERBS_CMD_FLAGS_MASK |
|
|
|
- IB_USER_VERBS_CMD_COMMAND_MASK)) {
|
|
|
- ret = -EINVAL;
|
|
|
- goto out;
|
|
|
- }
|
|
|
-
|
|
|
- command = hdr.command & IB_USER_VERBS_CMD_COMMAND_MASK;
|
|
|
-
|
|
|
if (command >= ARRAY_SIZE(uverbs_cmd_table) ||
|
|
|
!uverbs_cmd_table[command]) {
|
|
|
ret = -EINVAL;
|
|
|
@@ -749,21 +748,11 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
|
|
|
hdr.out_words * 4);
|
|
|
|
|
|
} else if (flags == IB_USER_VERBS_CMD_FLAG_EXTENDED) {
|
|
|
- __u32 command;
|
|
|
-
|
|
|
struct ib_uverbs_ex_cmd_hdr ex_hdr;
|
|
|
struct ib_udata ucore;
|
|
|
struct ib_udata uhw;
|
|
|
size_t written_count = count;
|
|
|
|
|
|
- if (hdr.command & ~(__u32)(IB_USER_VERBS_CMD_FLAGS_MASK |
|
|
|
- IB_USER_VERBS_CMD_COMMAND_MASK)) {
|
|
|
- ret = -EINVAL;
|
|
|
- goto out;
|
|
|
- }
|
|
|
-
|
|
|
- command = hdr.command & IB_USER_VERBS_CMD_COMMAND_MASK;
|
|
|
-
|
|
|
if (command >= ARRAY_SIZE(uverbs_ex_cmd_table) ||
|
|
|
!uverbs_ex_cmd_table[command]) {
|
|
|
ret = -ENOSYS;
|