Re: WARNING in usb_submit_urb

From: Alan Stern
Date: Wed Nov 08 2017 - 12:07:04 EST


On Wed, 8 Nov 2017, Dmitry Vyukov wrote:

> > I don't understand how this could have happened. The raw log explains
> > the problem:
> >
> >> [ 15.138822] usb usb1: BOGUS urb flags, 2 --> 0
> >> [ 15.139498] ------------[ cut here ]------------
> >> [ 15.139955] WARNING: CPU: 3 PID: 2986 at drivers/usb/core/urb.c:498 usb_submit_urb+0xeb9/0x10f0
> > ...
> >> [ 15.150280] RIP: 0010:usb_submit_urb+0xeb9/0x10f0
> > ...
> >> [ 15.155166] proc_do_submiturb+0x1f53/0x3860
> >
> > The "2 --> 0" means that proc_do_submiturb() tried to submit a control
> > URB (2 = PIPE_CONTROL) to an isochronous endpoint (0 = PIPE_ISOCHRONOUS).
> > But right near the start of the routine we have:
> >
> > switch (uurb->type) {
> > case USBDEVFS_URB_TYPE_CONTROL:
> > if (!usb_endpoint_xfer_control(&ep->desc))
> > return -EINVAL;
> >
> > So how was the warning triggered?
>
> I don't know what happened there, but bot provided a repro for this.

Can you provide a reproducer that will run in a 32-bit userspace
environment?

Alan Stern