drivers/usbdev_fs: update ctrlreq buffer len base on longest string descriptor

nuttx/mm/kasan/kasan.c:117
kasan_report
nuttx/mm/kasan/kasan.c:111
composite_mkstrdesc
nuttx/drivers/usbdev/composite.c:404
sunxi_ep0_disptach
nuttx/arch/arm/src/chip/drivers/rtos-hal/hal/source/usb/udc/udc.c:1287
up_common_handler
nuttx/arch/arm/src/chip/drivers/osal/src/hal_interrupt.c:10

Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
This commit is contained in:
dongjiuzhu1 2023-12-16 20:02:56 +08:00 committed by Xiang Xiao
parent 070ecb480a
commit 1355302036

View File

@ -298,8 +298,6 @@ static int16_t composite_mkcfgdesc(FAR struct usbdevclass_driver_s *driver,
memcpy(buf, priv->descs->cfgdesc, sizeof(struct usb_cfgdesc_s));
cfgdesc = (FAR struct usb_cfgdesc_s *)buf;
cfgdesc->totallen[0] = LSBYTE(priv->cfgdescsize);
cfgdesc->totallen[1] = MSBYTE(priv->cfgdescsize);
cfgdesc->ninterfaces = priv->ninterfaces;
/* Increment the size and buf to point right behind the information
@ -329,6 +327,9 @@ static int16_t composite_mkcfgdesc(FAR struct usbdevclass_driver_s *driver,
#endif
}
cfgdesc->totallen[0] = LSBYTE(total);
cfgdesc->totallen[1] = MSBYTE(total);
return total;
}
@ -1016,6 +1017,7 @@ FAR void *composite_initialize(FAR const struct usbdev_devdescs_s *devdescs,
FAR struct composite_devdesc_s *pdevices,
uint8_t ndevices)
{
FAR const struct usbdev_strdesc_s *strdesc;
FAR struct composite_alloc_s *alloc;
FAR struct composite_dev_s *priv;
FAR struct composite_driver_s *drvr;
@ -1073,6 +1075,26 @@ FAR void *composite_initialize(FAR const struct usbdev_devdescs_s *devdescs,
priv->ninterfaces += devobj->compdesc.devinfo.ninterfaces;
}
/* Update cfgdescsize based on the longest string descriptor */
#ifdef CONFIG_BOARD_USBDEV_SERIALSTR
ret = sizeof(struct usb_strdesc_s) + strlen(board_usbdev_serialstr()) * 2;
if (priv->cfgdescsize < ret)
{
priv->cfgdescsize = ret;
}
#endif
strdesc = devdescs->strdescs->strdesc;
for (i = 0; strdesc[i].string != NULL; i++)
{
ret = sizeof(struct usb_strdesc_s) + strlen(strdesc[i].string) * 2;
if (priv->cfgdescsize < ret)
{
priv->cfgdescsize = ret;
}
}
priv->ndevices = ndevices;
/* Initialize the USB class driver structure */