|
112 | 112 | */ |
113 | 113 | #define CONVERT_TO_INTERNAL_INDEX( lIndex ) ( ( lIndex ) - INDEX_OFFSET ) |
114 | 114 |
|
| 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 | + |
115 | 125 | /** |
116 | 126 | * @brief Get the index of a free slot in the kernel object pool. |
117 | 127 | * |
|
924 | 934 | UBaseType_t uxArraySize, |
925 | 935 | configRUN_TIME_COUNTER_TYPE * pulTotalRunTime ) /* PRIVILEGED_FUNCTION */ |
926 | 936 | { |
927 | | - UBaseType_t uxReturn = pdFALSE; |
| 937 | + UBaseType_t uxReturn = 0; |
928 | 938 | UBaseType_t xIsTaskStatusArrayWriteable = pdFALSE; |
929 | 939 | UBaseType_t xIsTotalRunTimeWriteable = pdFALSE; |
930 | 940 |
|
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 ) |
936 | 942 | { |
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 ); |
941 | 946 |
|
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 | + } |
946 | 959 | } |
947 | 960 |
|
948 | 961 | return uxReturn; |
|
0 commit comments