Skip to content

Possible buffer overflow #206

@adob

Description

@adob

_ux_device_stack_initialize allocates 256 bytes for ux_slave_transfer_request_data_pointer but up to 512 bytes may be written there since wMaxPacketSize is 512 in USB High-Speed mode.

Size check here:

transfer_request -> ux_slave_transfer_request_data_pointer =
_ux_utility_memory_allocate(UX_NO_ALIGN, UX_CACHE_SAFE_MEMORY, UX_SLAVE_REQUEST_CONTROL_MAX_LENGTH);

Buffer allocated here:

/* Check if we have enough in the local buffer. */
if (requested_length > endpoint -> ux_slave_endpoint_descriptor.wMaxPacketSize)
/* We have too much to transfer. */
local_requested_length = endpoint -> ux_slave_endpoint_descriptor.wMaxPacketSize;

Buffer written here:

 HAL_PCD_EP_Receive(dcd_stm32 -> pcd_handle,
                            endpoint->ux_slave_endpoint_descriptor.bEndpointAddress,
                            transfer_request->ux_slave_transfer_request_data_pointer,
                            transfer_request->ux_slave_transfer_request_requested_length);

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    Status

    Discussion

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions