|
|
@@ -439,11 +439,9 @@ ep_write (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
|
|
|
/* FIXME writebehind for O_NONBLOCK and poll(), qlen = 1 */
|
|
|
|
|
|
value = -ENOMEM;
|
|
|
- kbuf = kmalloc (len, GFP_KERNEL);
|
|
|
- if (!kbuf)
|
|
|
- goto free1;
|
|
|
- if (copy_from_user (kbuf, buf, len)) {
|
|
|
- value = -EFAULT;
|
|
|
+ kbuf = memdup_user(buf, len);
|
|
|
+ if (!kbuf) {
|
|
|
+ value = PTR_ERR(kbuf);
|
|
|
goto free1;
|
|
|
}
|
|
|
|
|
|
@@ -452,7 +450,6 @@ ep_write (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
|
|
|
data->name, len, (int) value);
|
|
|
free1:
|
|
|
mutex_unlock(&data->lock);
|
|
|
- kfree (kbuf);
|
|
|
return value;
|
|
|
}
|
|
|
|