Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp4472761ybx; Mon, 4 Nov 2019 14:01:22 -0800 (PST) X-Google-Smtp-Source: APXvYqwGmtCmfaHL/UiknH3i1FYXMV/X1oMRKiua8n84fZpkkZQK4twvT4IcfBykyBAKB7y4qoA9 X-Received: by 2002:a05:6402:883:: with SMTP id e3mr29843083edy.32.1572904882862; Mon, 04 Nov 2019 14:01:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1572904882; cv=none; d=google.com; s=arc-20160816; b=GmlHiGGm65faNncGb8wlrZ0UKYasZVGcppuCHx5cck0+iBQWGBsOlkt7VMH3E3WP92 GtDMOTgXeWrrrQum/wTLx8VrJDzo/vYhZSrThQlG8hzTxDW9v75sY1mo505kFgKq0Uqa vX8Aickw/u5GiC53MMTZNoCzZKwTBViEvQ0GhQ5NndRF55ZuaA1pYv/2LVlfGvNUKNUS liNP4Z70sAd+WQdaAZYn7H1k2amf4yMoGeNf9gjm97lyJzzvyvloQiwqmbeN9QaNaXv8 lWktv4F37F97xngM1qcS4QvIs+dILCA3Pws9kKJaLMpTdWoY1Eh2NDMOOCQhrK7YEQeo zOTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=KCN/tq+UXWzxe9NXJqrhbN6Z3fAWcuVBonbOseiSoFQ=; b=QMMtuVICjSiqs5m8Eq/b/rLeqOth1l+4uh34K8s+t8l/V2EZ3YsnnLq/saBlsojZZ+ pS18JIU+/QOhrP8jKscwawdQUe2jCCY+W0x6FZe8899oe5z2AsVzzV8R62yxXLluXUCn rezub1WBurgquRH4Z6x+01VWNjgaGcuyTr74YV53aO+QNLtl/pmy37pPKroeHQ/9RUaH ROLDh74zbaHUI3Dei2RpZWwuK3T4BOTp7kGgrgzB+/M8zjiW/fvTqE2kXnSRW/kt/C9f NE/Yc15T8umS+EiUot4xABAKxx/0087UgLlQkBGEmlpTVRwObxAdfcHMBL009OS6eC56 hqVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Npxs0+x8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d22si12526977ejj.347.2019.11.04.14.00.59; Mon, 04 Nov 2019 14:01:22 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Npxs0+x8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731085AbfKDV7S (ORCPT + 99 others); Mon, 4 Nov 2019 16:59:18 -0500 Received: from mail.kernel.org ([198.145.29.99]:56252 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731012AbfKDV7H (ORCPT ); Mon, 4 Nov 2019 16:59:07 -0500 Received: from localhost (6.204-14-84.ripe.coltfrance.com [84.14.204.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id EF2B5214E0; Mon, 4 Nov 2019 21:59:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572904746; bh=1+u1DkWnQPvDJmZtTN8GhHQZL6ffowQ+Ec2hlERuOeU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Npxs0+x8K0CdnJVgiM5+MBgRQUVdRxjboJ7dcSRwjB3Z+pRzP4hYbKPbP2Sb376Z3 CVQ02Go3G98HqOA6W6j6+3mHumed7afF7Ivuvs/EKMRghqLwfbT7QUefcRYx/m/nto h4eBCXgwOskQWUIsV5jTU/BlXRx+nqSGa8ddQcqk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Thinh Nguyen , Felipe Balbi , Sasha Levin Subject: [PATCH 4.19 038/149] usb: dwc3: gadget: early giveback if End Transfer already completed Date: Mon, 4 Nov 2019 22:43:51 +0100 Message-Id: <20191104212138.439588864@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104212126.090054740@linuxfoundation.org> References: <20191104212126.090054740@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Felipe Balbi [ Upstream commit 9f45581f5eec6786c6eded2b3c85345d82a910c9 ] There is a rare race condition that may happen during a Disconnect Interrupt if we have a started request that happens to be dequeued *after* completion of End Transfer command. If that happens, that request will be left waiting for completion of an End Transfer command that will never happen. If End Transfer command has already completed before, we are safe to giveback the request straight away. Tested-by: Thinh Nguyen Signed-off-by: Felipe Balbi Signed-off-by: Sasha Levin --- drivers/usb/dwc3/gadget.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index e7461c995116a..7b0957c530485 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1410,7 +1410,10 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, goto out0; dwc3_gadget_move_cancelled_request(req); - goto out0; + if (dep->flags & DWC3_EP_TRANSFER_STARTED) + goto out0; + else + goto out1; } dev_err(dwc->dev, "request %pK was not queued to %s\n", request, ep->name); @@ -1418,6 +1421,7 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, goto out0; } +out1: dwc3_gadget_giveback(dep, req, -ECONNRESET); out0: -- 2.20.1