dwc_otg: Avoid the use of align_buf for short packets
authorDom Cobley <popcornmix@gmail.com>
Thu, 7 Dec 2023 17:30:53 +0000 (17:30 +0000)
committerDom Cobley <popcornmix@gmail.com>
Mon, 19 Feb 2024 11:35:22 +0000 (11:35 +0000)
Recent kernels (from 6.5) fail to boot on Pi0-3.

This has been tracked down to the call to:
ret = usb_get_std_status(hdev, USB_RECIP_DEVICE, 0, &hubstatus);

returning garbage in hubstatus (it gets the uninitialised contents of
a kmalloc buffer that is not overwritten as expected).

As we don't have strong evidence that this code path has ever worked,
and it is causing a clear problem currently, lets disable it to
allow wider use of newer kernels.

Signed-off-by: Dom Cobley <popcornmix@gmail.com>
drivers/usb/host/dwc_otg/dwc_otg_hcd.c

index a2277ce..6964784 100644 (file)
@@ -1339,8 +1339,10 @@ static void assign_and_init_hc(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh)
                         * buffer.
                         */
                        wLength = ((uint16_t *)urb->setup_packet)[3];
+                       #if 0
                        if (hc->ep_is_in && wLength < 4)
                                ptr = hc->xfer_buff;
+                       #endif
 
                        hc->data_pid_start = qtd->data_toggle;
                        break;