]> git.baikalelectronics.ru Git - kernel.git/commit
usb: dwc3: gadget: Prevent EP queuing while stopping transfers
authorWesley Cheng <wcheng@codeaurora.org>
Thu, 12 Aug 2021 17:16:49 +0000 (20:16 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 15 Aug 2021 11:08:03 +0000 (13:08 +0200)
commit4faa928b3accc62d483c0eed3830988f86853328
treeb1f61de299324864417c81b39a75dd7440a83215
parent747d6c46c0b1c7136d318d005c62451671d5a22d
usb: dwc3: gadget: Prevent EP queuing while stopping transfers

[ Upstream commit f09ddcfcb8c569675066337adac2ac205113471f ]

In the situations where the DWC3 gadget stops active transfers, once
calling the dwc3_gadget_giveback(), there is a chance where a function
driver can queue a new USB request in between the time where the dwc3
lock has been released and re-aquired.  This occurs after we've already
issued an ENDXFER command.  When the stop active transfers continues
to remove USB requests from all dep lists, the newly added request will
also be removed, while controller still has an active TRB for it.
This can lead to the controller accessing an unmapped memory address.

Fix this by ensuring parameters to prevent EP queuing are set before
calling the stop active transfers API.

Fixes: ae7e86108b12 ("usb: dwc3: Stop active transfers before halting the controller")
Signed-off-by: Wesley Cheng <wcheng@codeaurora.org>
Link: https://lore.kernel.org/r/1615507142-23097-1-git-send-email-wcheng@codeaurora.org
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/dwc3/gadget.c