projects
/
cascardo
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'akpm' (patches from Andrew)
[cascardo/linux.git]
/
drivers
/
rapidio
/
rio_cm.c
diff --git
a/drivers/rapidio/rio_cm.c
b/drivers/rapidio/rio_cm.c
index
cebc296
..
bad0e0e
100644
(file)
--- a/
drivers/rapidio/rio_cm.c
+++ b/
drivers/rapidio/rio_cm.c
@@
-1841,24
+1841,19
@@
static int cm_chan_msg_send(void __user *arg)
{
struct rio_cm_msg msg;
void *buf;
{
struct rio_cm_msg msg;
void *buf;
- int ret
= 0
;
+ int ret;
if (copy_from_user(&msg, arg, sizeof(msg)))
return -EFAULT;
if (msg.size > RIO_MAX_MSG_SIZE)
return -EINVAL;
if (copy_from_user(&msg, arg, sizeof(msg)))
return -EFAULT;
if (msg.size > RIO_MAX_MSG_SIZE)
return -EINVAL;
- buf = kmalloc(msg.size, GFP_KERNEL);
- if (!buf)
- return -ENOMEM;
-
- if (copy_from_user(buf, (void __user *)(uintptr_t)msg.msg, msg.size)) {
- ret = -EFAULT;
- goto out;
- }
+ buf = memdup_user((void __user *)(uintptr_t)msg.msg, msg.size);
+ if (IS_ERR(buf))
+ return PTR_ERR(buf);
ret = riocm_ch_send(msg.ch_num, buf, msg.size);
ret = riocm_ch_send(msg.ch_num, buf, msg.size);
-out:
+
kfree(buf);
return ret;
}
kfree(buf);
return ret;
}