rtos: add sanity checking for FreeRTOS's quantity of priorities
authorPaul Fertser <fercerpav@gmail.com>
Wed, 14 Mar 2012 06:42:31 +0000 (09:42 +0300)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 19 Mar 2012 17:07:44 +0000 (17:07 +0000)
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>
src/rtos/FreeRTOS.c

index 2c4791745b3b9aba607eb2bd918b8a20d6116210..a64626989e3bd1310c0b589f7287915ec109fb76 100644 (file)
@@ -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) *

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)