Merge branch 'bugfix/freertos_addition_overflow' into 'master'

freertos: Fix addition overflow

Closes IDF-3193

See merge request espressif/esp-idf!13421
This commit is contained in:
Ivan Grokhotkov
2021-05-04 08:20:21 +00:00
2 changed files with 15 additions and 2 deletions

View File

@@ -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. */ 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 /* Allocate the queue and storage area. Justification for MISRA
deviation as follows: pvPortMalloc() always ensures returned memory deviation as follows: pvPortMalloc() always ensures returned memory
blocks are aligned per the requirements of the MCU stack. In this case blocks are aligned per the requirements of the MCU stack. In this case

View File

@@ -256,8 +256,15 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
this is a quirk of the implementation that means otherwise the free this is a quirk of the implementation that means otherwise the free
space would be reported as one byte smaller than would be logically space would be reported as one byte smaller than would be logically
expected. */ expected. */
xBufferSizeBytes++; if( xBufferSizeBytes < ( xBufferSizeBytes + 1 + sizeof( StreamBuffer_t ) ) )
pucAllocatedMemory = ( uint8_t * ) pvPortMalloc( xBufferSizeBytes + sizeof( StreamBuffer_t ) ); /*lint !e9079 malloc() only returns void*. */ {
xBufferSizeBytes++;
pucAllocatedMemory = ( uint8_t * ) pvPortMalloc( xBufferSizeBytes + sizeof( StreamBuffer_t ) ); /*lint !e9079 malloc() only returns void*. */
}
else
{
pucAllocatedMemory = NULL;
}
if( pucAllocatedMemory != NULL ) if( pucAllocatedMemory != NULL )
{ {