This is an automated email from Gerrit.

Paul Fertser (fercer...@gmail.com) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/520

-- gerrit

commit a3b1759e0d1641aa0e8a050b081b25eeb4471bea
Author: Paul Fertser <fercer...@gmail.com>
Date:   Wed Mar 14 09:24:22 2012 +0300

    rtos: fix segfault in FreeRTOS handling
    
    When gdb loads an elf file of a newer or older version of the firmware
    being debugged, or when the firmware is not running yet, there's a high
    probability of FreeRTOS variables to be read incorrectly, thus leading to
    an attempt to allocate an enourmous amount of memory. Without this check
    OpenOCD simply crashes and that's mad confusing.
    
    Change-Id: I404a072e886d2d47d9d942cfaea8417eb8bd4a5d
    Signed-off-by: Paul Fertser <fercer...@gmail.com>

diff --git a/src/rtos/FreeRTOS.c b/src/rtos/FreeRTOS.c
index c7b4643..f5765cb 100644
--- a/src/rtos/FreeRTOS.c
+++ b/src/rtos/FreeRTOS.c
@@ -187,6 +187,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\r\n", 
thread_list_size);
+                       return ERROR_FAIL;
+               }
                rtos->thread_details->threadid = 1;
                rtos->thread_details->exists = true;
                rtos->thread_details->display_str = NULL;
@@ -202,6 +206,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\r\n", 
thread_list_size);
+                       return ERROR_FAIL;
+               }
        }
 
        /* Find out how many lists are needed to be read from 
pxReadyTasksLists, */
@@ -216,6 +224,10 @@ static int FreeRTOS_update_threads(struct rtos *rtos)
        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 %lld priorities\r\n", 
max_used_priority);
+               return ERROR_FAIL;
+       }
 
        int num_lists;
        for (num_lists = 0; num_lists <= max_used_priority; num_lists++)

-- 

------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to