diff options
-rw-r--r-- | fs/ecryptfs/miscdev.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/fs/ecryptfs/miscdev.c b/fs/ecryptfs/miscdev.c index a67fea655f49..dda3c58eefc0 100644 --- a/fs/ecryptfs/miscdev.c +++ b/fs/ecryptfs/miscdev.c | |||
@@ -418,18 +418,13 @@ ecryptfs_miscdev_write(struct file *file, const char __user *buf, | |||
418 | 418 | ||
419 | if (count == 0) | 419 | if (count == 0) |
420 | goto out; | 420 | goto out; |
421 | data = kmalloc(count, GFP_KERNEL); | 421 | |
422 | if (!data) { | 422 | data = memdup_user(buf, count); |
423 | printk(KERN_ERR "%s: Out of memory whilst attempting to " | 423 | if (IS_ERR(data)) { |
424 | "kmalloc([%zd], GFP_KERNEL)\n", __func__, count); | 424 | printk(KERN_ERR "%s: memdup_user returned error [%ld]\n", |
425 | __func__, PTR_ERR(data)); | ||
425 | goto out; | 426 | goto out; |
426 | } | 427 | } |
427 | rc = copy_from_user(data, buf, count); | ||
428 | if (rc) { | ||
429 | printk(KERN_ERR "%s: copy_from_user returned error [%d]\n", | ||
430 | __func__, rc); | ||
431 | goto out_free; | ||
432 | } | ||
433 | sz = count; | 428 | sz = count; |
434 | i = 0; | 429 | i = 0; |
435 | switch (data[i++]) { | 430 | switch (data[i++]) { |