]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
usb: dwc3: gadget: Clear ep descriptor last
authorThinh Nguyen <Thinh.Nguyen@synopsys.com>
Wed, 16 Nov 2022 01:19:43 +0000 (17:19 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 2 Dec 2022 16:43:12 +0000 (17:43 +0100)
[ Upstream commit f90f5afd5083a7cb4aee13bd4cc0ae600bd381ca ]

Until the endpoint is disabled, its descriptors should remain valid.
When its requests are removed from ep disable, the request completion
routine may attempt to access the endpoint's descriptor. Don't clear the
descriptors before that.

Fixes: f09ddcfcb8c5 ("usb: dwc3: gadget: Prevent EP queuing while stopping transfers")
Cc: stable@vger.kernel.org
Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/45db7c83b209259115bf652af210f8b2b3b1a383.1668561364.git.Thinh.Nguyen@synopsys.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/usb/dwc3/gadget.c

index 448c8e6bc99dc2e1fbd36d4be0280cdaefed5cbf..6f61a288073bb9a2e5d0fda685f5d24b90d855f4 100644 (file)
@@ -1016,18 +1016,18 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)
        reg &= ~DWC3_DALEPENA_EP(dep->number);
        dwc3_writel(dwc->regs, DWC3_DALEPENA, reg);
 
-       /* Clear out the ep descriptors for non-ep0 */
-       if (dep->number > 1) {
-               dep->endpoint.comp_desc = NULL;
-               dep->endpoint.desc = NULL;
-       }
-
        dwc3_remove_requests(dwc, dep, -ESHUTDOWN);
 
        dep->stream_capable = false;
        dep->type = 0;
        dep->flags &= DWC3_EP_TXFIFO_RESIZED;
 
+       /* Clear out the ep descriptors for non-ep0 */
+       if (dep->number > 1) {
+               dep->endpoint.comp_desc = NULL;
+               dep->endpoint.desc = NULL;
+       }
+
        return 0;
 }