fastboot: Fix fastboot reboot fail by changing functions order
authoryurii.pidhornyi <yurii.pidhornyi@globallogic.com>
Thu, 20 Aug 2020 15:41:18 +0000 (18:41 +0300)
committerMarek Vasut <marex@denx.de>
Tue, 1 Sep 2020 12:47:43 +0000 (14:47 +0200)
It was revealed that when the fastboot_tx_write_str function is called
without the previously initialized fastboot_func->in_req->complete field,
a copy of in_req will be sent to the I/O requests queue without
an initialized field.

Moving a piece of code with the initializing of the
fastboot_func->in_req->complete field above transmit_tx allows to solve
this problem.

Fixes: 65c96757fe9 "usb: fastboot: Convert USB f_fastboot to shared fastboot"
Signed-off-by: yurii.pidhornyi <yurii.pidhornyi@globallogic.com>
drivers/usb/gadget/f_fastboot.c

index 30f7a52..d1d087e 100644 (file)
@@ -441,8 +441,6 @@ static void rx_handler_command(struct usb_ep *ep, struct usb_request *req)
                req->length = rx_bytes_expected(ep);
        }
 
-       fastboot_tx_write_str(response);
-
        if (!strncmp("OKAY", response, 4)) {
                switch (cmd) {
                case FASTBOOT_COMMAND_BOOT:
@@ -462,6 +460,8 @@ static void rx_handler_command(struct usb_ep *ep, struct usb_request *req)
                }
        }
 
+       fastboot_tx_write_str(response);
+
        *cmdbuf = '\0';
        req->actual = 0;
        usb_ep_queue(ep, req, 0);