diff options
Diffstat (limited to 'drivers/usb/gadget/function/f_fs.c')
| -rw-r--r-- | drivers/usb/gadget/function/f_fs.c | 14 | 
1 files changed, 5 insertions, 9 deletions
| diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index 801a8b668a35..bf109191659a 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c @@ -2640,6 +2640,7 @@ static int __ffs_data_got_strings(struct ffs_data *ffs,  	do { /* lang_count > 0 so we can use do-while */  		unsigned needed = needed_count; +		u32 str_per_lang = str_count;  		if (len < 3)  			goto error_free; @@ -2675,7 +2676,7 @@ static int __ffs_data_got_strings(struct ffs_data *ffs,  			data += length + 1;  			len -= length + 1; -		} while (--str_count); +		} while (--str_per_lang);  		s->id = 0;   /* terminator */  		s->s = NULL; @@ -3826,14 +3827,9 @@ static char *ffs_prepare_buffer(const char __user *buf, size_t len)  	if (!len)  		return NULL; -	data = kmalloc(len, GFP_KERNEL); -	if (!data) -		return ERR_PTR(-ENOMEM); - -	if (copy_from_user(data, buf, len)) { -		kfree(data); -		return ERR_PTR(-EFAULT); -	} +	data = memdup_user(buf, len); +	if (IS_ERR(data)) +		return ERR_PTR(PTR_ERR(data));  	pr_vdebug("Buffer from user space:\n");  	ffs_dump_mem("", data, len); | 
