From: Jeff Lucovsky Date: Fri, 11 Feb 2022 15:38:45 +0000 (-0500) Subject: log/stack: Propagate original signal X-Git-Tag: suricata-6.0.5~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F7215%2Fhead;p=thirdparty%2Fsuricata.git log/stack: Propagate original signal Issue: 4550 This commit modifies the "stack trace on signal" to propagate the original signal received instead of always raising SIGABRT. (cherry picked from commit a3443845fbaf5c01bb8758817490bc93b5c039a5) --- diff --git a/src/suricata.c b/src/suricata.c index 8e3fad9aed..ee0c9e9bcc 100644 --- a/src/suricata.c +++ b/src/suricata.c @@ -300,6 +300,9 @@ static void SignalHandlerUnexpected(int sig_num, siginfo_t *info, void *context) { char msg[SC_LOG_MAX_LOG_MSG_LEN]; unw_cursor_t cursor; + /* Restore defaults for signals to avoid loops */ + signal(SIGABRT, SIG_DFL); + signal(SIGSEGV, SIG_DFL); int r; if ((r = unw_init_local(&cursor, (unw_context_t *)(context)) != 0)) { fprintf(stderr, "unable to obtain stack trace: unw_init_local: %s\n", unw_strerror(r)); @@ -332,9 +335,8 @@ static void SignalHandlerUnexpected(int sig_num, siginfo_t *info, void *context) SCLogError(SC_ERR_SIGNAL, "%s", msg); terminate: - // Terminate with SIGABRT ... but first, restore that signal's default handling - signal(SIGABRT, SIG_DFL); - abort(); + // Propagate signal to watchers, if any + kill(0, sig_num); } #undef UNW_LOCAL_ONLY #endif /* HAVE_LIBUNWIND */