summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXu Yang <xu.yang_2@nxp.com>2022-06-23 11:02:42 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-06-29 08:59:51 +0200
commit2d7bdb6a5a37e57b2b93e138f543e8accdad2531 (patch)
treef9e6e8b1028297aaa5afb92d49d7901f8fdf9f0a
parent656eca37aae1f7dad26693ab1bd1c1d4f110741c (diff)
downloadlinux-stable-2d7bdb6a5a37e57b2b93e138f543e8accdad2531.tar.gz
linux-stable-2d7bdb6a5a37e57b2b93e138f543e8accdad2531.tar.bz2
linux-stable-2d7bdb6a5a37e57b2b93e138f543e8accdad2531.zip
usb: chipidea: udc: check request status before setting device address
commit b24346a240b36cfc4df194d145463874985aa29b upstream. The complete() function may be called even though request is not completed. In this case, it's necessary to check request status so as not to set device address wrongly. Fixes: 10775eb17bee ("usb: chipidea: udc: update gadget states according to ch9") cc: <stable@vger.kernel.org> Signed-off-by: Xu Yang <xu.yang_2@nxp.com> Link: https://lore.kernel.org/r/20220623030242.41796-1-xu.yang_2@nxp.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/chipidea/udc.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index 5f35cdd2cf1d..67d8da04848e 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -1034,6 +1034,9 @@ isr_setup_status_complete(struct usb_ep *ep, struct usb_request *req)
struct ci_hdrc *ci = req->context;
unsigned long flags;
+ if (req->status < 0)
+ return;
+
if (ci->setaddr) {
hw_usb_set_address(ci, ci->address);
ci->setaddr = false;