From beae86a8b9bf3ba2464efd903b15c778bd516aff Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 4 Jul 2012 09:18:01 +0200 Subject: [PATCH] --- yaml --- r: 316987 b: refs/heads/master c: 2102e06a5f2e414694921f23591f072a5ba7db9f h: refs/heads/master i: 316985: dbf69441c47d108c411f73c3de070f96d49c5932 316983: b8168c9cf94e94dfdc73285ec92bee1ae3c1a4cd v: v3 --- [refs] | 2 +- trunk/drivers/usb/core/devio.c | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index dd7295e48933..9fa533ddf000 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 02f824ac75d1c861aae59be5d6d739043c2066e7 +refs/heads/master: 2102e06a5f2e414694921f23591f072a5ba7db9f diff --git a/trunk/drivers/usb/core/devio.c b/trunk/drivers/usb/core/devio.c index e0f107948eba..62679bc031fb 100644 --- a/trunk/drivers/usb/core/devio.c +++ b/trunk/drivers/usb/core/devio.c @@ -1604,10 +1604,14 @@ static int processcompl_compat(struct async *as, void __user * __user *arg) void __user *addr = as->userurb; unsigned int i; - if (as->userbuffer && urb->actual_length) - if (copy_to_user(as->userbuffer, urb->transfer_buffer, - urb->actual_length)) + if (as->userbuffer && urb->actual_length) { + if (urb->number_of_packets > 0) /* Isochronous */ + i = urb->transfer_buffer_length; + else /* Non-Isoc */ + i = urb->actual_length; + if (copy_to_user(as->userbuffer, urb->transfer_buffer, i)) return -EFAULT; + } if (put_user(as->status, &userurb->status)) return -EFAULT; if (put_user(urb->actual_length, &userurb->actual_length))