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

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.

[0] 
http://www.mail-archive.com/[email protected]/msg33457.html

> regards,
> dan carpenter

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

Reply via email to