From patchwork Fri Dec 13 02:30:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Suwan Kim X-Patchwork-Id: 11289737 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 57A59138C for ; Fri, 13 Dec 2019 02:31:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 36256227BF for ; Fri, 13 Dec 2019 02:31:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ig/3FDil" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731671AbfLMCbi (ORCPT ); Thu, 12 Dec 2019 21:31:38 -0500 Received: from mail-pf1-f194.google.com ([209.85.210.194]:40422 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731330AbfLMCbi (ORCPT ); Thu, 12 Dec 2019 21:31:38 -0500 Received: by mail-pf1-f194.google.com with SMTP id q8so621698pfh.7; Thu, 12 Dec 2019 18:31:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WwpeGjmnfuoMNodJxH1qqlcQ4ceXry1kM/GE4cUt360=; b=Ig/3FDil1XBe7TMbnNFatTTHH+Z4vR6bke278InL188wJrQ9DO5uhXv/3Xe8HKpnHi 4ev8PfRD1/0LIGHsIAc/uMJ4MgVI0TdXytpWOXxBCXyu24OHQrGXM8/99aPYX/XVVk2a 3iBzk7hq04axFjOQOJg/xUe2tV2rCYgweb7qup0RKABAAWLab9/mRLket5lUdFcEWdUs F1il50L8w/iI6dQSRCENr4/7t48MYNmg+VO/GGoaicnTpQjOJeor5MyjGCA9w43Wjl6F n3sAMZInzhiAdh7kuOaaF/aPA9NEg2EcB48Zysx8Wjohw2Kz9m9CqtwTJN9rFYgEUlvH FAdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WwpeGjmnfuoMNodJxH1qqlcQ4ceXry1kM/GE4cUt360=; b=hwV+/d1x4AFQNbRxHj938a+0Wbbn2xoKDchFfZU3Ghy2WWLMxBNrKy5BLlmogZDYht Q8ttysH6ndc+cae4eVZ4aLHN3EKzB6J+f99ML5TnjLVh3C3qAQ4edX36wnW3YxZ7pV3m xLUNBC2tcTkINWUtfD0FazRQWRDmE/SPD1+wDyU6ZZGC4HP3yQZdpvMpaz6e90BaihU1 KaoTO3mMe9MsP/ioR+QUkYyAiS5moPLnnRsilBcOlbiAl5MY2+WiM9Mk0HJHLpgR0WqY c/qagrutNqkryuPxeKgMr04LStcu+dB9EgUElgNSuj5+FWzSNHwj1ucAofzyCK8+xAdv oovA== X-Gm-Message-State: APjAAAVvsOULSpB2BNcu7aqjYeglCXHSpVM2/mafYv5tyHxxrr2XoJ21 9oT0ukPAsJLeKI2mBeDUICc= X-Google-Smtp-Source: APXvYqxIutMG4PWuFmKKIVkujL0jQkDxOF/aHzjaDXUNuF0FySs/kuqqivCyl1zcITLgXexw2Wcesw== X-Received: by 2002:a65:5608:: with SMTP id l8mr14517216pgs.210.1576204297724; Thu, 12 Dec 2019 18:31:37 -0800 (PST) Received: from localhost.localdomain ([163.152.162.99]) by smtp.gmail.com with ESMTPSA id h68sm9443654pfe.162.2019.12.12.18.31.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Dec 2019 18:31:37 -0800 (PST) From: Suwan Kim To: shuah@kernel.org, valentina.manea.m@gmail.com, gregkh@linuxfoundation.org, marmarek@invisiblethingslab.com Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, stern@rowland.harvard.edu, Suwan Kim Subject: [PATCH v2 1/2] usbip: Fix receive error in vhci-hcd when using scatter-gather Date: Fri, 13 Dec 2019 11:30:54 +0900 Message-Id: <20191213023055.19933-2-suwan.kim027@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191213023055.19933-1-suwan.kim027@gmail.com> References: <20191213023055.19933-1-suwan.kim027@gmail.com> MIME-Version: 1.0 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org 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 Tested-by: Marek Marczykowski-Górecki Signed-off-by: Suwan Kim Acked-by: Shuah Khan --- drivers/usb/usbip/usbip_common.c | 3 +++ 1 file changed, 3 insertions(+) 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) From patchwork Fri Dec 13 02:30:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Suwan Kim X-Patchwork-Id: 11289739 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7630E14B7 for ; Fri, 13 Dec 2019 02:31:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 551062253D for ; Fri, 13 Dec 2019 02:31:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BsX91WyJ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731967AbfLMCbu (ORCPT ); Thu, 12 Dec 2019 21:31:50 -0500 Received: from mail-pf1-f194.google.com ([209.85.210.194]:34834 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727202AbfLMCbu (ORCPT ); Thu, 12 Dec 2019 21:31:50 -0500 Received: by mail-pf1-f194.google.com with SMTP id b19so636663pfo.2; Thu, 12 Dec 2019 18:31:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=VU8W+29VAE6jFbK7qOuEkNtChestID0TQVv19tl4TzA=; b=BsX91WyJ3Nk1wK5jIB4BZeo+UIaW3MvOPtwkDUqOsQ7lBFFvKxxAEngBlmSfQoZNLa 5tTxwd2JMnKzYHwFt5RLW5YLKoKtPful9Qjbf56CnidI3ksFOI6obT2UrvLw1d1hI1nr w4AXDGo/hKt9EIswYATHIDAdg/2asKTWA5TMiaWYYW8Nd8Rwjq5alAj1ggM7TIMCK/+0 TYSuNCnEnbad767SJtJTjEdwbmAffLWOozv+D93+zwhkdsDXf31KdF1HvesQ0o7o57Qo c9v5DGmWj3rURVqZwESr+6hDCSFDM5+73ZoZTSyaBHM49GcBVtZlS8LVMELxVR2wKIf3 UKyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VU8W+29VAE6jFbK7qOuEkNtChestID0TQVv19tl4TzA=; b=WpbBA7mrdLgp5w70+13p1XFDYB/s6VwsRxCcZYRYIWnzjKOoVj3X21gDBtFJDyxa57 ReIabrjtKEKiO73iEoSXcK0XQcK2Mqz2v0gAF9JmKgBuHMV+r2qwhqvY/kFQDh6pORxd 4PJLOH0XMecoqV9Ph6rLnBwW8u+siY/uUs+g1cRTYJO9i0qxLTlu0Quk6rsKsEJn1jHV QMZ9P0lI78J8sSB8BuUCFb0iNr+Nj99WUa6RQcPHdxm6PFX1LJC8gI6YMkbjBfK00JIO Eawx6gHVgKmIm5yNM2W4HBFMHplvY30KZbCECa8ihiOL3ZeNOok9Aj4tN/fqremF9oaD mP7Q== X-Gm-Message-State: APjAAAX8+ME4kTYCRj27/NYNlFdrQtPqr9TFIhttC/KXykY6h8YZ2L96 TMTkav/Fs7B6RRFR3L+kjGk= X-Google-Smtp-Source: APXvYqyoiXE9viROKrRyaoUenVpkWigIxRGvBXQmBt4YZeDe6PYpB+c5VJh2QMBypaRwwP6UG/4r+g== X-Received: by 2002:aa7:8007:: with SMTP id j7mr13594737pfi.73.1576204309272; Thu, 12 Dec 2019 18:31:49 -0800 (PST) Received: from localhost.localdomain ([163.152.162.99]) by smtp.gmail.com with ESMTPSA id h68sm9443654pfe.162.2019.12.12.18.31.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Dec 2019 18:31:48 -0800 (PST) From: Suwan Kim To: shuah@kernel.org, valentina.manea.m@gmail.com, gregkh@linuxfoundation.org, marmarek@invisiblethingslab.com Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, stern@rowland.harvard.edu, Suwan Kim Subject: [PATCH v2 2/2] usbip: Fix error path of vhci_recv_ret_submit() Date: Fri, 13 Dec 2019 11:30:55 +0900 Message-Id: <20191213023055.19933-3-suwan.kim027@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191213023055.19933-1-suwan.kim027@gmail.com> References: <20191213023055.19933-1-suwan.kim027@gmail.com> MIME-Version: 1.0 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org If a transaction error happens in vhci_recv_ret_submit(), event handler closes connection and changes port status to kick hub_event. Then hub tries to flush the endpoint URBs, but that causes infinite loop between usb_hub_flush_endpoint() and vhci_urb_dequeue() because "vhci_priv" in vhci_urb_dequeue() was already released by vhci_recv_ret_submit() before a transmission error occurred. Thus, vhci_urb_dequeue() terminates early and usb_hub_flush_endpoint() continuously calls vhci_urb_dequeue(). The root cause of this issue is that vhci_recv_ret_submit() terminates early without giving back URB when transaction error occurs in vhci_recv_ret_submit(). That causes the error URB to still be linked at endpoint list without “vhci_priv". So, in the case of transaction error in vhci_recv_ret_submit(), unlink URB from the endpoint, insert proper error code in urb->status and give back URB. Reported-by: Marek Marczykowski-Górecki Tested-by: Marek Marczykowski-Górecki Signed-off-by: Suwan Kim Acked-by: Shuah Khan --- drivers/usb/usbip/vhci_rx.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/usb/usbip/vhci_rx.c b/drivers/usb/usbip/vhci_rx.c index 33f8972ba842..00fc98741c5d 100644 --- a/drivers/usb/usbip/vhci_rx.c +++ b/drivers/usb/usbip/vhci_rx.c @@ -77,16 +77,21 @@ static void vhci_recv_ret_submit(struct vhci_device *vdev, usbip_pack_pdu(pdu, urb, USBIP_RET_SUBMIT, 0); /* recv transfer buffer */ - if (usbip_recv_xbuff(ud, urb) < 0) - return; + if (usbip_recv_xbuff(ud, urb) < 0) { + urb->status = -EPROTO; + goto error; + } /* recv iso_packet_descriptor */ - if (usbip_recv_iso(ud, urb) < 0) - return; + if (usbip_recv_iso(ud, urb) < 0) { + urb->status = -EPROTO; + goto error; + } /* restore the padding in iso packets */ usbip_pad_iso(ud, urb); +error: if (usbip_dbg_flag_vhci_rx) usbip_dump_urb(urb);