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 <david.henningsson@canonical.com>
This commit is contained in:
parent
85b14bd45d
commit
f82ec71566
|
@ -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++)
|
||||
|
|
Loading…
Reference in New Issue