usb: raw-gadget: fix return value of ep read ioctls
They must return the number of bytes transferred during the data stage. Fixes:068fbff4f8("usb: raw-gadget: Fix copy_to/from_user() checks") Fixes:f2c2e71764("usb: gadget: add raw-gadget interface") Signed-off-by: Andrey Konovalov <andreyknvl@google.com> Signed-off-by: Felipe Balbi <balbi@kernel.org>
This commit is contained in:
committed by
Felipe Balbi
parent
4748d39639
commit
6e50764420
@@ -669,12 +669,14 @@ static int raw_ioctl_ep0_read(struct raw_dev *dev, unsigned long value)
|
|||||||
if (IS_ERR(data))
|
if (IS_ERR(data))
|
||||||
return PTR_ERR(data);
|
return PTR_ERR(data);
|
||||||
ret = raw_process_ep0_io(dev, &io, data, false);
|
ret = raw_process_ep0_io(dev, &io, data, false);
|
||||||
if (ret)
|
if (ret < 0)
|
||||||
goto free;
|
goto free;
|
||||||
|
|
||||||
length = min(io.length, (unsigned int)ret);
|
length = min(io.length, (unsigned int)ret);
|
||||||
if (copy_to_user((void __user *)(value + sizeof(io)), data, length))
|
if (copy_to_user((void __user *)(value + sizeof(io)), data, length))
|
||||||
ret = -EFAULT;
|
ret = -EFAULT;
|
||||||
|
else
|
||||||
|
ret = length;
|
||||||
free:
|
free:
|
||||||
kfree(data);
|
kfree(data);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -964,12 +966,14 @@ static int raw_ioctl_ep_read(struct raw_dev *dev, unsigned long value)
|
|||||||
if (IS_ERR(data))
|
if (IS_ERR(data))
|
||||||
return PTR_ERR(data);
|
return PTR_ERR(data);
|
||||||
ret = raw_process_ep_io(dev, &io, data, false);
|
ret = raw_process_ep_io(dev, &io, data, false);
|
||||||
if (ret)
|
if (ret < 0)
|
||||||
goto free;
|
goto free;
|
||||||
|
|
||||||
length = min(io.length, (unsigned int)ret);
|
length = min(io.length, (unsigned int)ret);
|
||||||
if (copy_to_user((void __user *)(value + sizeof(io)), data, length))
|
if (copy_to_user((void __user *)(value + sizeof(io)), data, length))
|
||||||
ret = -EFAULT;
|
ret = -EFAULT;
|
||||||
|
else
|
||||||
|
ret = length;
|
||||||
free:
|
free:
|
||||||
kfree(data);
|
kfree(data);
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
Reference in New Issue
Block a user