| From 2fc3afa0eaea7bf11920ee313f61edc2493c5d3e Mon Sep 17 00:00:00 2001 |
| From: Suwan Kim <suwan.kim027@gmail.com> |
| Date: Fri, 13 Dec 2019 11:30:54 +0900 |
| Subject: [PATCH] usbip: Fix receive error in vhci-hcd when using |
| scatter-gather |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| commit d986294ee55d719562b20aabe15a39bf8f863415 upstream. |
| |
| When vhci uses SG and receives data whose size is smaller than SG |
| buffer size, it tries to receive more data even if it acutally |
| receives all the data from the server. If then, it erroneously adds |
| error event and triggers connection shutdown. |
| |
| vhci-hcd should check if it received all the data even if there are |
| more SG entries left. So, check if it receivces all the data from |
| the server in for_each_sg() loop. |
| |
| Fixes: ea44d190764b ("usbip: Implement SG support to vhci-hcd and stub driver") |
| Reported-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> |
| Tested-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> |
| Signed-off-by: Suwan Kim <suwan.kim027@gmail.com> |
| Acked-by: Shuah Khan <skhan@linuxfoundation.org> |
| Cc: stable <stable@vger.kernel.org> |
| Link: https://lore.kernel.org/r/20191213023055.19933-2-suwan.kim027@gmail.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/usb/usbip/usbip_common.c b/drivers/usb/usbip/usbip_common.c |
| index 6532d68e8808..e4b96674c405 100644 |
| --- a/drivers/usb/usbip/usbip_common.c |
| +++ b/drivers/usb/usbip/usbip_common.c |
| @@ -727,6 +727,9 @@ int usbip_recv_xbuff(struct usbip_device *ud, struct urb *urb) |
| |
| copy -= recv; |
| ret += recv; |
| + |
| + if (!copy) |
| + break; |
| } |
| |
| if (ret != size) |
| -- |
| 2.7.4 |
| |