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>
This commit is contained in:
parent
fe11baeebb
commit
e26d076190
|
@ -30,6 +30,8 @@
|
||||||
#include "helper/log.h"
|
#include "helper/log.h"
|
||||||
#include "rtos_standard_stackings.h"
|
#include "rtos_standard_stackings.h"
|
||||||
|
|
||||||
|
#define FREERTOS_MAX_PRIORITIES 63
|
||||||
|
|
||||||
#define FreeRTOS_STRUCT(int_type, ptr_type, list_prev_offset)
|
#define FreeRTOS_STRUCT(int_type, ptr_type, list_prev_offset)
|
||||||
|
|
||||||
struct FreeRTOS_params {
|
struct FreeRTOS_params {
|
||||||
|
@ -220,6 +222,11 @@ static int FreeRTOS_update_threads(struct rtos *rtos)
|
||||||
(uint8_t *)&max_used_priority);
|
(uint8_t *)&max_used_priority);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
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 *list_of_lists =
|
||||||
(symbol_address_t *)malloc(sizeof(symbol_address_t) *
|
(symbol_address_t *)malloc(sizeof(symbol_address_t) *
|
||||||
|
|
Loading…
Reference in New Issue