usb: gadget: fix check in sync read from ep in gadgetfs
When reading synchronously from a non-zero endpoint, gadgetfs will return -EFAULT even if the read succeeds, due to a bad check of the copy_to_iter() return value. This fix compares the return value of copy_to_iter to the amount of bytes that was passed, and only fails if they are not the same. Signed-off-by: Binyamin Sharet <s.binyamin@gmail.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:
Родитель
528d28138f
Коммит
63196e9896
|
@ -606,7 +606,7 @@ ep_read_iter(struct kiocb *iocb, struct iov_iter *to)
|
||||||
}
|
}
|
||||||
if (is_sync_kiocb(iocb)) {
|
if (is_sync_kiocb(iocb)) {
|
||||||
value = ep_io(epdata, buf, len);
|
value = ep_io(epdata, buf, len);
|
||||||
if (value >= 0 && copy_to_iter(buf, value, to))
|
if (value >= 0 && (copy_to_iter(buf, value, to) != value))
|
||||||
value = -EFAULT;
|
value = -EFAULT;
|
||||||
} else {
|
} else {
|
||||||
struct kiocb_priv *priv = kzalloc(sizeof *priv, GFP_KERNEL);
|
struct kiocb_priv *priv = kzalloc(sizeof *priv, GFP_KERNEL);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче