[rtems commit] rtems-debugger-threads.c: Fix three Dereference before null check errors

Joel Sherrill joel at rtems.org
Fri Feb 12 23:13:43 UTC 2021


Module:    rtems
Branch:    master
Commit:    f65d3384dd923c9ead9bcf264592bd879054f6dc
Changeset: http://git.rtems.org/rtems/commit/?id=f65d3384dd923c9ead9bcf264592bd879054f6dc

Author:    Ryan Long <ryan.long at oarcorp.com>
Date:      Fri Feb 12 13:50:36 2021 -0500

rtems-debugger-threads.c: Fix three Dereference before null check errors

CID 1468681: Dereference before null check in rtems_debugger_thread_continue().
CID 1468690: Dereference before null check in rtems_debugger_thread_system_resume().
CID 1468694: Dereference before null check in rtems_debugger_thread_find_index().

Closes #4241.

---

 cpukit/libdebugger/rtems-debugger-threads.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/cpukit/libdebugger/rtems-debugger-threads.c b/cpukit/libdebugger/rtems-debugger-threads.c
index 84a9faa..5b96e5f 100644
--- a/cpukit/libdebugger/rtems-debugger-threads.c
+++ b/cpukit/libdebugger/rtems-debugger-threads.c
@@ -148,9 +148,9 @@ int
 rtems_debugger_thread_find_index(rtems_id id)
 {
   rtems_debugger_threads* threads = rtems_debugger->threads;
-  rtems_debugger_thread*  current = rtems_debugger_thread_current(threads);
   int                     r = -1;
   if (threads != NULL) {
+    rtems_debugger_thread* current = rtems_debugger_thread_current(threads);
     size_t i;
     for (i = 0; i < threads->current.level; ++i) {
       if (id == 0 || current[i].id == id) {
@@ -347,8 +347,11 @@ rtems_debugger_thread_system_resume(bool detaching)
   rtems_debugger_threads* threads = rtems_debugger->threads;
   rtems_debugger_thread*  current;
   int                     r = 0;
+  if (threads == NULL) {
+    return r;
+  }
   current = rtems_debugger_thread_current(threads);
-  if (threads != NULL && current != NULL) {
+  if (current != NULL) {
     size_t i;
     if (rtems_debugger_verbose())
       rtems_debugger_printf("rtems-db: sys:    : resuming\n");
@@ -430,8 +433,13 @@ rtems_debugger_thread_continue_all(void)
   rtems_debugger_threads* threads = rtems_debugger->threads;
   rtems_debugger_thread*  current;
   int                     r = 0;
+  if (threads == NULL) {
+    r = -1;
+    errno = EIO;
+    return r;
+  }
   current = rtems_debugger_thread_current(threads);
-  if (threads != NULL && current != NULL) {
+  if (current != NULL) {
     size_t i;
     for (i = 0; i < threads->current.level; ++i) {
       rtems_debugger_thread* thread = &current[i];



More information about the vc mailing list