[Jack-Devel] [PATCH] jackdbus: Fix sigsegv handling segfaulting by itself

PrevNext  Index
DateTue, 17 Apr 2012 12:33:21 +0200
From David Henningsson <[hidden] at canonical dot com>
To[hidden] at lists dot jackaudio dot org
Follow-UpNedko Arnaudov Re: [Jack-Devel] [PATCH] jackdbus: Fix sigsegv handling segfaulting by itself
In my case, the siginfo code was -6, causing the sigsegv handling
to crash on its own. This patch adds a range check for siginfo code.

BugLink: https://bugs.launchpad.net/bugs/983835
Signed-off-by: David Henningsson <[hidden]>
---
 dbus/sigsegv.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/dbus/sigsegv.c b/dbus/sigsegv.c
index 03b1183..8a87dc8 100644
--- a/dbus/sigsegv.c
+++ b/dbus/sigsegv.c
@@ -60,6 +60,7 @@ static void signal_segv(int signum, siginfo_t* info, void*ptr) {
     static const char *si_codes[3] = {"", "SEGV_MAPERR", "SEGV_ACCERR"};
 
     size_t i;
+    const char *si_code_str;
     ucontext_t *ucontext = (ucontext_t*)ptr;
 
 #if defined(SIGSEGV_STACK_X86) || defined(SIGSEGV_STACK_IA64)
@@ -94,9 +95,14 @@ static void signal_segv(int signum, siginfo_t* info, void*ptr) {
         jack_error("Unknown bad signal catched!");
     }
 
+    if (info->si_code >= 0 && info->si_code < 3) 
+        si_code_str = si_codes[info->si_code];
+    else
+        si_code_str = "unknown";
+
     jack_error("info.si_signo = %d", signum);
     jack_error("info.si_errno = %d", info->si_errno);
-    jack_error("info.si_code  = %d (%s)", info->si_code, si_codes[info->si_code]);
+    jack_error("info.si_code  = %d (%s)", info->si_code, si_code_str);
     jack_error("info.si_addr  = %p", info->si_addr);
 #if !defined(__alpha__) && !defined(__ia64__) && !defined(__FreeBSD_kernel__) && !defined(__arm__) && !defined(__hppa__) && !defined(__sh__)
     for(i = 0; i < NGREG; i++)
-- 
1.7.9.5
PrevNext  Index

1334658822.12328_0.ltw:2,a <1334658801-14312-1-git-send-email-david.henningsson at canonical dot com>