On Sat, 2021-10-30 at 14:20 +0000, Joakim Tjernlund wrote:
> On Fri, 2021-10-29 at 17:14 +0000, Eugene Bordenkircher wrote:
> > Hello all,
> > 
> > We've discovered a situation where the FSL udc driver 
> > (drivers/usb/gadget/udc/fsl_udc_core.c) will enter a loop iterating over 
> > the request queue, but the queue has been corrupted at some point so it 
> > loops infinitely.  I believe we have narrowed into the offending code, but 
> > we are in need of assistance trying to find an appropriate fix for the 
> > problem.  The identified code appears to be in all versions of the Linux 
> > kernel the driver exists in.
> > 
> > The problem appears to be when handling a USB_REQ_GET_STATUS request.  The 
> > driver gets this request and then calls the ch9getstatus() function.  In 
> > this function, it starts a request by "borrowing" the per device 
> > status_req, filling it in, and then queuing it with a call to 
> > list_add_tail() to add the request to the endpoint queue.  Right before it 
> > exits the function however, it's calling ep0_prime_status(), which is 
> > filling out that same status_req structure and then queuing it with another 
> > call to list_add_tail() to add the request to the endpoint queue.  This 
> > adds two instances of the exact same LIST_HEAD to the endpoint queue, which 
> > breaks the list since the prev and next pointers end up pointing to the 
> > wrong things.  This ends up causing a hard loop the next time nuke() gets 
> > called, which happens on the next setup IRQ.
> > 
> > I'm not sure what the appropriate fix to this problem is, mostly due to my 
> > lack of expertise in USB and this driver stack.  The code has been this way 
> > in the kernel for a very long time, which suggests that it has been 
> > working, unless USB_REQ_GET_STATUS requests are never made.  This further 
> > suggests that there is something else going on that I don't understand.  
> > Deleting the call to ep0_prime_status() and the following ep0stall() call 
> > appears, on the surface, to get the device working again, but may have side 
> > effects that I'm not seeing.
> > 
> > I'm hopeful someone in the community can help provide some information on 
> > what I may be missing or help come up with a solution to the problem.  A 
> > big thank you to anyone who would like to help out.
> > 
> > Eugene
> 
> Run into this to a while ago. Found the bug and a few more fixes.
> This is against 4.19 so you may have to tweak them a bit.
> Feel free to upstream them.
> 
>  Jocke 

Curious, did my patches help? Good to known once we upgrade as well.

 Jocke

Reply via email to