Mesa (master): util: Limit the stack walk to avoid referencing undefined memory.

Keith Whitwell keithw at kemper.freedesktop.org
Tue May 5 12:17:27 UTC 2009


Module: Mesa
Branch: master
Commit: 3537c3420d0887ed22565b9e4469952b99f1b76f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3537c3420d0887ed22565b9e4469952b99f1b76f

Author: José Fonseca <jfonseca at vmware.com>
Date:   Thu Apr 30 13:10:58 2009 +0100

util: Limit the stack walk to avoid referencing undefined memory.

---

 src/gallium/auxiliary/util/u_debug_stack.c |   11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_debug_stack.c b/src/gallium/auxiliary/util/u_debug_stack.c
index e9891fd..528a1c3 100644
--- a/src/gallium/auxiliary/util/u_debug_stack.c
+++ b/src/gallium/auxiliary/util/u_debug_stack.c
@@ -62,6 +62,8 @@ debug_backtrace_capture(struct debug_stack_frame *backtrace,
    
 #ifdef PIPE_ARCH_X86
    while(nr_frames) {
+      const void **next_frame_pointer;
+
       if(!frame_pointer)
          break;
       
@@ -72,7 +74,14 @@ debug_backtrace_capture(struct debug_stack_frame *backtrace,
          --nr_frames;
       }
       
-      frame_pointer = (const void **)frame_pointer[0];
+      next_frame_pointer = (const void **)frame_pointer[0];
+      
+      /* Limit the stack walk to avoid referencing undefined memory */
+      if((uintptr_t)next_frame_pointer <= (uintptr_t)frame_pointer ||
+         (uintptr_t)next_frame_pointer > (uintptr_t)frame_pointer + 64*1024)
+         break;
+      
+      frame_pointer = next_frame_pointer;
    }
 #endif
    




More information about the mesa-commit mailing list