From e0834b3047a81602c52875d7effc56983f273fdb Mon Sep 17 00:00:00 2001 From: Jeff Lucovsky Date: Fri, 11 Feb 2022 10:38:45 -0500 Subject: [PATCH] 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) --- src/suricata.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 */ -- 2.47.2