From 658a0acdbef252928054f6f7feb6bb01462864ae Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Tue, 4 May 2021 16:37:58 +1000 Subject: [PATCH] freertos: Check for arithmetic overflows on queue creation Addition overflow check is from FreeRTOS kernel commit 47338393f1f79558f6144213409f09f81d7c4837 --- components/freertos/queue.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/components/freertos/queue.c b/components/freertos/queue.c index c00a940cc2..81df2db898 100644 --- a/components/freertos/queue.c +++ b/components/freertos/queue.c @@ -395,6 +395,12 @@ Queue_t * const pxQueue = xQueue; xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ } + /* Check for multiplication overflow. */ + configASSERT( ( uxItemSize == 0 ) || ( uxQueueLength == ( xQueueSizeInBytes / uxItemSize ) ) ); + + /* Check for addition overflow. */ + configASSERT( ( sizeof( Queue_t ) + xQueueSizeInBytes ) > xQueueSizeInBytes ); + /* Allocate the queue and storage area. Justification for MISRA deviation as follows: pvPortMalloc() always ensures returned memory blocks are aligned per the requirements of the MCU stack. In this case