On Mon, May 13, 2002, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>     > But, you're absolutely right about an error message being preferable to
>     > a dead system. The patch is simple enough and I've attached it to the
>     > bottom of this message.
> 
>     Well, since 0 is not an illegal value as specified in the USB spec, I
>     think we should do this check in the usb_submit_urb() call, not force it
>     to be duplicated in all host drivers.  So how about the patch below?
> 
>      int usb_submit_urb(struct urb *urb, int mem_flags)
>      {
>     -    if (urb && urb->dev && urb->dev->bus && urb->dev->bus->op)
>     +
>     +    if (urb && urb->dev && urb->dev->bus && urb->dev->bus->op) {
>     +        if (usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe)) <= 0) {
>     +            err("%s: pipe %x has invalid size (<= 0)", __FUNCTION__, urb->pipe);
>     +            return -EMSGSIZE;
>     +        }
>              return urb->dev->bus->op->submit_urb(urb, mem_flags);
>     -    else
>     -        return -ENODEV;
>     +    }
>     +    return -ENODEV;
>      }
>      
> Hmm. So arbitrary. Why only this single test?
> uhci_submit_urb() starts with several sanity checks.

I assume you mean uhci_submit_urb in usb-uhci, since uhci only has the 2
checks above.

The only other check I can see is:

        if (urb->transfer_buffer_length < 0 && type != PIPE_ISOCHRONOUS) {

How far should we go to catch broken drivers? As it turns out, the patch
I sent appears to fix a bug that was triggered by a broken driver.

> And why precisely is it necessary?
> Why does the kernel die? Does it hang in a spinlock with
> disabled interrupts? Inspection of the code without this
> stopgap might reveal other bugs.

Yes. There's a loop which creates all of the TD's for the transfer and
since the endpoint size is 0, we never advance and we get stuck in an
infinite loop.

JE


_______________________________________________________________

Have big pipes? SourceForge.net is looking for download mirrors. We supply
the hardware. You get the recognition. Email Us: [EMAIL PROTECTED]
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to