diff options
author | Paul Fertser <fercerpav@gmail.com> | 2012-03-14 09:42:31 +0300 |
---|---|---|
committer | Spencer Oliver <spen@spen-soft.co.uk> | 2012-03-19 17:07:44 +0000 |
commit | e26d0761905930c326d4166349198ed8bc6af5ae (patch) | |
tree | 0e55428644b28d25c0832842b50fec391d4be793 /src | |
parent | fe11baeebb4e238d4bdc47382edb68d3b4156fd3 (diff) |
rtos: add sanity checking for FreeRTOS's quantity of priorities
On operating systems with opportunistic malloc() (e.g. default setting in
GNU/Linux) malloc can sometimes allocate a huge memory region but later the
process will get killed on the first attempt to use this memory, so
checking for malloc's return value is not enough to prevent a crash.
This patch is compile-tested only.
Change-Id: I5e21663115c8e9a0ca9f3d71f7ba4bd09e5c3bb1
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Reviewed-on: http://openocd.zylin.com/521
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'src')
-rw-r--r-- | src/rtos/FreeRTOS.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/rtos/FreeRTOS.c b/src/rtos/FreeRTOS.c index 2c479174..a6462698 100644 --- a/src/rtos/FreeRTOS.c +++ b/src/rtos/FreeRTOS.c @@ -30,6 +30,8 @@ #include "helper/log.h" #include "rtos_standard_stackings.h" +#define FREERTOS_MAX_PRIORITIES 63 + #define FreeRTOS_STRUCT(int_type, ptr_type, list_prev_offset) struct FreeRTOS_params { @@ -220,6 +222,11 @@ static int FreeRTOS_update_threads(struct rtos *rtos) (uint8_t *)&max_used_priority); if (retval != ERROR_OK) return retval; + if (max_used_priority > FREERTOS_MAX_PRIORITIES) { + LOG_ERROR("FreeRTOS maximum used priority is unreasonably big, not proceeding: %" PRId64 "", + max_used_priority); + return ERROR_FAIL; + } symbol_address_t *list_of_lists = (symbol_address_t *)malloc(sizeof(symbol_address_t) * |