Skip to content

Commit 7003ba7

Browse files
authored
Backport PR 836 to FreeRTOS-Kernel V10.6.1 (#837)
Signed-off-by: Gaurav Aggarwal <[email protected]>
1 parent 0264280 commit 7003ba7

File tree

1 file changed

+27
-14
lines changed

1 file changed

+27
-14
lines changed

portable/Common/mpu_wrappers_v2.c

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,16 @@
112112
*/
113113
#define CONVERT_TO_INTERNAL_INDEX( lIndex ) ( ( lIndex ) - INDEX_OFFSET )
114114

115+
/**
116+
* @brief Max value that fits in a size_t type.
117+
*/
118+
#define mpuSIZE_MAX ( ~( ( size_t ) 0 ) )
119+
120+
/**
121+
* @brief Check if multiplying a and b will result in overflow.
122+
*/
123+
#define mpuMULTIPLY_WILL_OVERFLOW( a, b ) ( ( ( a ) > 0 ) && ( ( b ) > ( mpuSIZE_MAX / ( a ) ) ) )
124+
115125
/**
116126
* @brief Get the index of a free slot in the kernel object pool.
117127
*
@@ -924,25 +934,28 @@
924934
UBaseType_t uxArraySize,
925935
configRUN_TIME_COUNTER_TYPE * pulTotalRunTime ) /* PRIVILEGED_FUNCTION */
926936
{
927-
UBaseType_t uxReturn = pdFALSE;
937+
UBaseType_t uxReturn = 0;
928938
UBaseType_t xIsTaskStatusArrayWriteable = pdFALSE;
929939
UBaseType_t xIsTotalRunTimeWriteable = pdFALSE;
930940

931-
xIsTaskStatusArrayWriteable = xPortIsAuthorizedToAccessBuffer( pxTaskStatusArray,
932-
sizeof( TaskStatus_t ) * uxArraySize,
933-
tskMPU_WRITE_PERMISSION );
934-
935-
if( pulTotalRunTime != NULL )
941+
if( mpuMULTIPLY_WILL_OVERFLOW( sizeof( TaskStatus_t ), uxArraySize ) == 0 )
936942
{
937-
xIsTotalRunTimeWriteable = xPortIsAuthorizedToAccessBuffer( pulTotalRunTime,
938-
sizeof( configRUN_TIME_COUNTER_TYPE ),
939-
tskMPU_WRITE_PERMISSION );
940-
}
943+
xIsTaskStatusArrayWriteable = xPortIsAuthorizedToAccessBuffer( pxTaskStatusArray,
944+
sizeof( TaskStatus_t ) * uxArraySize,
945+
tskMPU_WRITE_PERMISSION );
941946

942-
if( ( xIsTaskStatusArrayWriteable == pdTRUE ) &&
943-
( ( pulTotalRunTime == NULL ) || ( xIsTotalRunTimeWriteable == pdTRUE ) ) )
944-
{
945-
uxReturn = uxTaskGetSystemState( pxTaskStatusArray, uxArraySize, pulTotalRunTime );
947+
if( pulTotalRunTime != NULL )
948+
{
949+
xIsTotalRunTimeWriteable = xPortIsAuthorizedToAccessBuffer( pulTotalRunTime,
950+
sizeof( configRUN_TIME_COUNTER_TYPE ),
951+
tskMPU_WRITE_PERMISSION );
952+
}
953+
954+
if( ( xIsTaskStatusArrayWriteable == pdTRUE ) &&
955+
( ( pulTotalRunTime == NULL ) || ( xIsTotalRunTimeWriteable == pdTRUE ) ) )
956+
{
957+
uxReturn = uxTaskGetSystemState( pxTaskStatusArray, uxArraySize, pulTotalRunTime );
958+
}
946959
}
947960

948961
return uxReturn;

0 commit comments

Comments
 (0)