mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
USB: usbfs: only copy the actual data received
commit d4a4683ca0 upstream.
We need to only copy the data received by the device to userspace, not
the whole kernel buffer, which can contain "stale" data.
Thanks to Marcus Meissner for pointing this out and testing the fix.
Reported-by: Marcus Meissner <meissner@suse.de>
Tested-by: Marcus Meissner <meissner@suse.de>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
a206591bd3
commit
2bac497bb2
@@ -1312,9 +1312,9 @@ static int processcompl(struct async *as, void __user * __user *arg)
|
||||
void __user *addr = as->userurb;
|
||||
unsigned int i;
|
||||
|
||||
if (as->userbuffer)
|
||||
if (as->userbuffer && urb->actual_length)
|
||||
if (copy_to_user(as->userbuffer, urb->transfer_buffer,
|
||||
urb->transfer_buffer_length))
|
||||
urb->actual_length))
|
||||
goto err_out;
|
||||
if (put_user(as->status, &userurb->status))
|
||||
goto err_out;
|
||||
@@ -1435,9 +1435,9 @@ static int processcompl_compat(struct async *as, void __user * __user *arg)
|
||||
void __user *addr = as->userurb;
|
||||
unsigned int i;
|
||||
|
||||
if (as->userbuffer)
|
||||
if (as->userbuffer && urb->actual_length)
|
||||
if (copy_to_user(as->userbuffer, urb->transfer_buffer,
|
||||
urb->transfer_buffer_length))
|
||||
urb->actual_length))
|
||||
return -EFAULT;
|
||||
if (put_user(as->status, &userurb->status))
|
||||
return -EFAULT;
|
||||
|
||||
Reference in New Issue
Block a user