On Fri, Jan 04, 2002, Greg KH <[EMAIL PROTECTED]> wrote:
> On Fri, Jan 04, 2002 at 03:31:12PM +0100, Peter Osterlund wrote:
> > I think my device rapidly disappeared/reappeared and disappeared again
> > on the bus, but I don't know for sure, because I didn't have serial
> > console logging active at the time, and I can not repeat the problem.
> > 
> > Anyway, if (header->bLength < 2) is true in usb_parse_interface (line
> > 1546), the endpoint, extra and extralen fields will never be
> > initialized. This will lead to either corruption or a memory leak when
> > usb_destroy_configuration is called. Therefore I think this patch is
> > correct.
> 
> Good catch.  How about this patch instead which removes a bit of the
> same logic elsewhere:
> 
> diff -Nru a/drivers/usb/usb.c b/drivers/usb/usb.c
> --- a/drivers/usb/usb.c       Fri Jan  4 13:05:08 2002
> +++ b/drivers/usb/usb.c       Fri Jan  4 13:05:08 2002
> @@ -1535,6 +1535,9 @@
>               }
>  
>               ifp = interface->altsetting + interface->num_altsetting;
> +             ifp->endpoint = NULL;
> +             ifp->extra = NULL;
> +             ifp->extralen = 0;
>               interface->num_altsetting++;
>  
>               memcpy(ifp, buffer, USB_DT_INTERFACE_SIZE);
> @@ -1576,10 +1579,7 @@
>               /* Copy any unknown descriptors into a storage area for */
>               /*  drivers to later parse */
>               len = (int)(buffer - begin);
> -             if (!len) {
> -                     ifp->extra = NULL;
> -                     ifp->extralen = 0;
> -             } else {
> +             if (len) {
>                       ifp->extra = kmalloc(len, GFP_KERNEL);
>  
>                       if (!ifp->extra) {

While the patch is good for the header->bLength case, I don't think
this is what is causing the problem.

All connects and disconnects are serialized through khubd. There's no
way we could call usb_destroy_configuration when we're in
usb_parse_interface.

Also, if header->bLength is < 2, then we'll almost always get an oops,
not just if the device disappears quickly.

JE


_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to