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 a67fea655f4..dda3c58eefc 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,  	if (count == 0)  		goto out; -	data = kmalloc(count, GFP_KERNEL); -	if (!data) { -		printk(KERN_ERR "%s: Out of memory whilst attempting to " -		       "kmalloc([%zd], GFP_KERNEL)\n", __func__, count); + +	data = memdup_user(buf, count); +	if (IS_ERR(data)) { +		printk(KERN_ERR "%s: memdup_user returned error [%ld]\n", +		       __func__, PTR_ERR(data));  		goto out;  	} -	rc = copy_from_user(data, buf, count); -	if (rc) { -		printk(KERN_ERR "%s: copy_from_user returned error [%d]\n", -		       __func__, rc); -		goto out_free; -	}  	sz = count;  	i = 0;  	switch (data[i++]) {  |