ch552: Fix FIDO data copy

Fix potential out of bounds write.
This commit is contained in:
Jonas Thörnblad 2025-05-06 12:53:12 +02:00
parent ec9ef31140
commit 14e4cd09c9
No known key found for this signature in database
GPG key ID: 2D318AD00A326F95

View file

@ -1687,18 +1687,19 @@ void main()
// Copy FIDO data from UartRxBuf to FrameBuf // Copy FIDO data from UartRxBuf to FrameBuf
if (FrameStarted && !FrameDiscard && !FidoDataAvailable) { if (FrameStarted && !FrameDiscard && !FidoDataAvailable) {
if (FrameMode == IO_FIDO) { if (FrameMode == IO_FIDO) {
// Check if a complete frame has been received if ((FrameRemainingBytes >= MAX_FRAME_SIZE) &&
if (UartRxBufByteCount >= FrameRemainingBytes) { (UartRxBufByteCount >= MAX_FRAME_SIZE)) {
circular_copy(FrameBuf, circular_copy(FrameBuf,
UartRxBuf, UartRxBuf,
UART_RX_BUF_SIZE, UART_RX_BUF_SIZE,
UartRxBufOutputPointer, UartRxBufOutputPointer,
FrameRemainingBytes); MAX_FRAME_SIZE);
FrameBufLength = MAX_FRAME_SIZE; FrameBufLength = MAX_FRAME_SIZE;
// Update output pointer // Update output pointer
UartRxBufOutputPointer = increment_pointer(UartRxBufOutputPointer, UartRxBufOutputPointer = increment_pointer(UartRxBufOutputPointer,
FrameRemainingBytes, MAX_FRAME_SIZE,
UART_RX_BUF_SIZE); UART_RX_BUF_SIZE);
FrameRemainingBytes -= MAX_FRAME_SIZE;
FidoDataAvailable = 1; FidoDataAvailable = 1;
cts_start(); cts_start();
} }