X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Frtos%2FFreeRTOS.c;h=a64626989e3bd1310c0b589f7287915ec109fb76;hp=c7b46434ba8102823fcb71d0effb25f5b9ce3dc1;hb=e26d0761905930c326d4166349198ed8bc6af5ae;hpb=7b032df3aa63905c16c63f1ba4414a04687f3777;ds=sidebyside diff --git a/src/rtos/FreeRTOS.c b/src/rtos/FreeRTOS.c index c7b46434ba..a64626989e 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 { @@ -187,6 +189,10 @@ static int FreeRTOS_update_threads(struct rtos *rtos) tasks_found++; rtos->thread_details = (struct thread_detail *) malloc( sizeof(struct thread_detail) * thread_list_size); + if (!rtos->thread_details) { + LOG_ERROR("Error allocating memory for %d threads", thread_list_size); + return ERROR_FAIL; + } rtos->thread_details->threadid = 1; rtos->thread_details->exists = true; rtos->thread_details->display_str = NULL; @@ -202,6 +208,10 @@ static int FreeRTOS_update_threads(struct rtos *rtos) /* create space for new thread details */ rtos->thread_details = (struct thread_detail *) malloc( sizeof(struct thread_detail) * thread_list_size); + if (!rtos->thread_details) { + LOG_ERROR("Error allocating memory for %d threads", thread_list_size); + return ERROR_FAIL; + } } /* Find out how many lists are needed to be read from pxReadyTasksLists, */ @@ -212,10 +222,19 @@ 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) * (max_used_priority+1 + 5)); + if (!list_of_lists) { + LOG_ERROR("Error allocating memory for %" PRId64 " priorities", max_used_priority); + return ERROR_FAIL; + } int num_lists; for (num_lists = 0; num_lists <= max_used_priority; num_lists++)