Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2102e06a authored by Hans de Goede's avatar Hans de Goede Committed by Greg Kroah-Hartman
Browse files

usbdevfs: Correct amount of data copied to user in processcompl_compat



iso data buffers may have holes in them if some packets were short, so for
iso urbs we should always copy the entire buffer, just like the regular
processcompl does.

Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
CC: stable@vger.kernel.org
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 02f824ac
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -1604,10 +1604,14 @@ static int processcompl_compat(struct async *as, void __user * __user *arg)
	void __user *addr = as->userurb;
	void __user *addr = as->userurb;
	unsigned int i;
	unsigned int i;


	if (as->userbuffer && urb->actual_length)
	if (as->userbuffer && urb->actual_length) {
		if (copy_to_user(as->userbuffer, urb->transfer_buffer,
		if (urb->number_of_packets > 0)		/* Isochronous */
				 urb->actual_length))
			i = urb->transfer_buffer_length;
		else					/* Non-Isoc */
			i = urb->actual_length;
		if (copy_to_user(as->userbuffer, urb->transfer_buffer, i))
			return -EFAULT;
			return -EFAULT;
	}
	if (put_user(as->status, &userurb->status))
	if (put_user(as->status, &userurb->status))
		return -EFAULT;
		return -EFAULT;
	if (put_user(urb->actual_length, &userurb->actual_length))
	if (put_user(urb->actual_length, &userurb->actual_length))