rtos: Do not dereference null pointers
authorSpencer Oliver <spen@spen-soft.co.uk>
Mon, 19 Aug 2013 13:42:53 +0000 (14:42 +0100)
committerSpencer Oliver <spen@spen-soft.co.uk>
Sun, 8 Sep 2013 16:11:29 +0000 (16:11 +0000)
detected by clang.

Change-Id: Id395f9d33bc2903b29a158fc3540ae51857e6aa0
Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-on: http://openocd.zylin.com/1555
Tested-by: jenkins
src/rtos/linux.c

index 80d84d73e7779b919d70fdcbda78a04e1fa2704a..e692ada8274edd417b303fd41751869cd920fafd 100644 (file)
@@ -533,7 +533,7 @@ int get_current(struct target *target, int create)
                                        LOG_ERROR
                                                ("error in linux current thread update");
 
-                               if (create) {
+                               if (create && ct) {
                                        struct threads *t;
                                        t = calloc(1, sizeof(struct threads));
                                        t->base_addr = ct->TS;
@@ -1140,13 +1140,12 @@ int linux_gdb_thread_packet(struct target *target,
        char *tmp_str = out_str;
        tmp_str += sprintf(tmp_str, "m");
        struct threads *temp = linux_os->thread_list;
-       tmp_str += sprintf(tmp_str, "%016" PRIx64, temp->threadid);
-       temp = temp->next;
 
        while (temp != NULL) {
-               tmp_str += sprintf(tmp_str, ",");
                tmp_str += sprintf(tmp_str, "%016" PRIx64, temp->threadid);
                temp = temp->next;
+               if (temp)
+                       tmp_str += sprintf(tmp_str, ",");
        }
 
        gdb_put_packet(connection, out_str, strlen(out_str));