Azure RTOS USBX — это высокопроизводительный USB-хост, устройство и встроенный стек On-The-Go (OTG), который полностью интегрирован с Azure…
Azure RTOS USBX — это высокопроизводительный USB-хост, устройство и встроенный стек On-The-Go (OTG), который полностью интегрирован с Azure RTOS ThreadX. Дело в том, что в [_ux_host_class_pima_read](https://github.com/azure-rtos/usbx/blob/master/common/usbx_host_classes/src/ux_host_class_pima_read.c) есть длина данных из ответа устройства, возвращаемая в самом первом пакете и считываемая [кодом L165](https://github.com/azure-rtos/usbx/blob/082fd9db09a3669eca3358f10b8837a5c1635c0b/common/usbx_host_classes/src/ux_host_class_pima_read.c#L165) в качестве header_length. Затем в [коде L178](https://github.com/azure-rtos/usbx/blob/082fd9db09a3669eca3358f10b8837a5c1635c0b/common/usbx_host_classes/src/ux_host_class_pima_read.c#L178) есть ветвь "if", которая проверяет выражение "(header_length - UX_HOST_CLASS_PIMA_DATA_HEADER_SIZE) > data_length", где, если header_length меньше, чем UX_HOST_CLASS_PIMA_DATA_HEADER_SIZE, вычисление может переполниться, а затем [код L182](https://github.com/azure-rtos/usbx/blob/082fd9db09a3669eca3358f10b8837a5c1635c0b/common/usbx_host_classes/src/ux_host_class_pima_read.c#L182) вычисление data_length также переполняется, таким образом, более поздний [цикл while начинается с L192](https://github.com/azure-rtos/usbx/blob/082fd9db09a3669eca3358f10b8837a5c1635c0b/common/usbx_host_classes/src/ux_host_class_pima_read.c#L192) может переместить data_pointer на неожиданный адрес и вызвать переполнение буфера записи. Исправление было включено в выпуск USBX [6.1.12](https://github.com/azure-rtos/usbx/releases/tag/v6.1.12_rel). Следующее можно использовать в качестве обходного пути: Добавьте проверку `header_length`: 1. Она должна быть больше, чем `UX_HOST_CLASS_PIMA_DATA_HEADER_SIZE`. 1. Она должна быть больше или равна текущей возвращаемой длине данных (`transfer_request -> ux_transfer_request_actual_length`).
Продукт вычитает одно значение из другого таким образом, что результат оказывается меньше минимально допустимого целочисленного значения, что даёт значение, не равное корректному результату.
https://cwe.mitre.org/data/definitions/191.html →Открыть в коллекции CWE →