Re: usb: gadget: dummy_hcd: add support for USB_DT_BOS on rh

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Sep 10, 2012 at 04:45:06PM +0200, Sebastian Andrzej Siewior wrote:
> On Mon, Sep 10, 2012 at 05:21:39PM +0300, Dan Carpenter wrote:
> > Hello Sebastian Andrzej Siewior,
> > 
> > The patch 3b9c1c5ba7a95: "usb: gadget: dummy_hcd: add support for
> > USB_DT_BOS on rh" from Oct 19, 2012, leads to the following warning:
> > drivers/usb/gadget/dummy_hcd.c:2038 dummy_hub_control()
> > 	 error: memcpy() 'buf' too small (15 vs 16)
> > 
> >   2031          case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
> >   2032                  if (hcd->speed != HCD_USB3)
> >   2033                          goto error;
> >   2034  
> >   2035                  if ((wValue >> 8) != USB_DT_BOS)
> >   2036                          goto error;
> >   2037  
> >   2038                  memcpy(buf, &usb3_bos_desc, sizeof(usb3_bos_desc));
> >                                                     ^^^^^^^^^^^^^^^^^^^^^^
> >   2039                  retval = sizeof(usb3_bos_desc);
> >   2040                  break;
> > 
> > 
> > buf is declared in rh_call_control() as:
> >        u8              tbuf[USB_DT_BOS_SIZE + USB_DT_USB_SS_CAP_SIZE]
> >                 __attribute__((aligned(4)));
> 
> What kind of sorcery is this? This sorcery is off by one.
> 
> > The new code might work because of the alignment, but it's not
> > beautiful.
> 
> Both structs are defined as packed. The first struct (usb_bos_descriptor) has
> 5 bytes, the second (usb_ss_cap_descriptor) has the bytes. This leads us to
> the following equation:
>   5 + 10 = 15

Ah crap...  This is a bug in Sparse (which Smatch uses as a parser).
It doesn't handle packed structs correctly.  Sorry for the noise.

> 
> Regadging beautiful: Alan introduced it in ("USB: Revised fixups for root-hub
> message handler") [0]. Sarah extended this to 15 bytes for USB3 that means
> xhci code is also on the edge. I'm innocent here. You can only blame me for
> looking the other way while adding BOS descriptor to dummy.
> 

I meant something else.  I thought that sizeof(usb3_bos_desc) was
16 but that it still would work in testing.

regards,
dan carpenter

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux