diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-09-29 11:20:53 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-09-29 11:20:52 -0700 |
| commit | 425322249a1cccdd14d1c1d80cd572faf51cf06c (patch) | |
| tree | e5729812a73425270c521d7f4d7dab167d35c263 /drivers/soc | |
| parent | a7d7221fa3f91bb197f2677ee8a70137881d0fb5 (diff) | |
| parent | 9f18e779e61f42622e901d4da17647ad07205a28 (diff) | |
Merge "msm: mink: Accept zero args for invoke command"
Diffstat (limited to 'drivers/soc')
| -rw-r--r-- | drivers/soc/qcom/smcinvoke.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/soc/qcom/smcinvoke.c b/drivers/soc/qcom/smcinvoke.c index a1344f0780b0..6de73217bf86 100644 --- a/drivers/soc/qcom/smcinvoke.c +++ b/drivers/soc/qcom/smcinvoke.c @@ -375,23 +375,27 @@ long smcinvoke_ioctl(struct file *filp, unsigned cmd, unsigned long arg) nr_args = object_counts_num_buffers(req.counts) + object_counts_num_objects(req.counts); - if (!nr_args || req.argsize != sizeof(union smcinvoke_arg)) { + if (req.argsize != sizeof(union smcinvoke_arg)) { ret = -EINVAL; goto out; } - args_buf = kzalloc(nr_args * req.argsize, GFP_KERNEL); - if (!args_buf) { - ret = -ENOMEM; - goto out; - } + if (nr_args) { - ret = copy_from_user(args_buf, (void __user *)(req.args), + args_buf = kzalloc(nr_args * req.argsize, GFP_KERNEL); + if (!args_buf) { + ret = -ENOMEM; + goto out; + } + + ret = copy_from_user(args_buf, + (void __user *)(req.args), nr_args * req.argsize); - if (ret) { - ret = -EFAULT; - goto out; + if (ret) { + ret = -EFAULT; + goto out; + } } inmsg_size = compute_in_msg_size(&req, args_buf); |
