mirror of
https://github.com/hathach/tinyusb.git
synced 2025-02-07 05:54:11 +08:00
check max_len for vendor and hid
This commit is contained in:
parent
fb214f7cf7
commit
53b749fd72
@ -162,8 +162,9 @@ uint16_t hidd_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, uint1
|
|||||||
{
|
{
|
||||||
TU_VERIFY(TUSB_CLASS_HID == desc_itf->bInterfaceClass, 0);
|
TU_VERIFY(TUSB_CLASS_HID == desc_itf->bInterfaceClass, 0);
|
||||||
|
|
||||||
// max length is at least interface + hid descriptor + 1 endpoint
|
// len = interface + hid + n*endpoints
|
||||||
TU_ASSERT(max_len >= sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + sizeof(tusb_desc_endpoint_t), 0);
|
uint16_t const drv_len = sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + desc_itf->bNumEndpoints*sizeof(tusb_desc_endpoint_t);
|
||||||
|
TU_ASSERT(max_len >= drv_len, 0);
|
||||||
|
|
||||||
// Find available interface
|
// Find available interface
|
||||||
hidd_interface_t * p_hid = NULL;
|
hidd_interface_t * p_hid = NULL;
|
||||||
@ -205,7 +206,7 @@ uint16_t hidd_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, uint1
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + desc_itf->bNumEndpoints*sizeof(tusb_desc_endpoint_t);
|
return drv_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle class control request
|
// Handle class control request
|
||||||
|
5
src/class/vendor/vendor_device.c
vendored
5
src/class/vendor/vendor_device.c
vendored
@ -170,6 +170,9 @@ uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, ui
|
|||||||
{
|
{
|
||||||
TU_VERIFY(TUSB_CLASS_VENDOR_SPECIFIC == itf_desc->bInterfaceClass, 0);
|
TU_VERIFY(TUSB_CLASS_VENDOR_SPECIFIC == itf_desc->bInterfaceClass, 0);
|
||||||
|
|
||||||
|
uint16_t const drv_len = sizeof(tusb_desc_interface_t) + itf_desc->bNumEndpoints*sizeof(tusb_desc_endpoint_t);
|
||||||
|
TU_VERIFY(max_len >= drv_len, 0);
|
||||||
|
|
||||||
// Find available interface
|
// Find available interface
|
||||||
vendord_interface_t* p_vendor = NULL;
|
vendord_interface_t* p_vendor = NULL;
|
||||||
for(uint8_t i=0; i<CFG_TUD_VENDOR; i++)
|
for(uint8_t i=0; i<CFG_TUD_VENDOR; i++)
|
||||||
@ -194,7 +197,7 @@ uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, ui
|
|||||||
TU_BREAKPOINT();
|
TU_BREAKPOINT();
|
||||||
}
|
}
|
||||||
|
|
||||||
return sizeof(tusb_desc_interface_t) + itf_desc->bNumEndpoints*sizeof(tusb_desc_endpoint_t);
|
return drv_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool vendord_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
|
bool vendord_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user