diff mbox

Fix BZ #18084 (backtrace(..., 0) crash on x86)

Message ID CAPC3xaqq7VQm+1VCBuUz=GXKUZC7A4x3MmHxYCCTShiwqMmyuQ@mail.gmail.com
State New
Headers show

Commit Message

Paul Pluzhnikov Aug. 10, 2015, 12:04 a.m. UTC
Greetings,

This patch fixes BZ #18084 -- crash in backtrace(..., 0) on x86.
Tested on Linux/x86, no new failures.

Thanks,

2015-08-09  Paul Pluzhnikov  <ppluzhnikov@google.com>

        * sysdeps/i386/backtrace.c (__backtrace): Handle size==0.
        * debug/tst-backtrace2.c (do_test): Add test for BZ #18084.

Comments

Tolga Dalman Aug. 10, 2015, 7:02 p.m. UTC | #1
On 08/10/2015 02:04 AM, Paul Pluzhnikov wrote:
> This patch fixes BZ #18084 -- crash in backtrace(..., 0) on x86.
> Tested on Linux/x86, no new failures.

That looks correct and should be applied to the other arches as well
(I looked at x86_64 and arm).

Best regards
Tolga Dalman
diff mbox

Patch

diff --git a/debug/tst-backtrace2.c b/debug/tst-backtrace2.c
index 846ca35..396d743 100644
--- a/debug/tst-backtrace2.c
+++ b/debug/tst-backtrace2.c
@@ -94,6 +94,12 @@  fn3 (void)
 NO_INLINE static int
 do_test (void)
 {
+  /* Test BZ #18084.  */
+  void *buffer[1];
+
+  if (backtrace (buffer, 0) != 0)
+    FAIL ();
+
   fn3 ();
   return ret;
 }
diff --git a/sysdeps/i386/backtrace.c b/sysdeps/i386/backtrace.c
index 550234f..a0eff81 100644
--- a/sysdeps/i386/backtrace.c
+++ b/sysdeps/i386/backtrace.c
@@ -122,8 +122,10 @@  __backtrace (array, size)
     return 0;
 #endif
 
-  if (size >= 1)
-    unwind_backtrace (backtrace_helper, &arg);
+  if (size <= 0)
+    return 0;
+
+  unwind_backtrace (backtrace_helper, &arg);
 
   if (arg.cnt > 1 && arg.array[arg.cnt - 1] == NULL)
     --arg.cnt;