]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
log/stack: Propagate original signal 6979/head
authorJeff Lucovsky <jeff@lucovsky.org>
Fri, 11 Feb 2022 15:38:45 +0000 (10:38 -0500)
committerJeff Lucovsky <jeff@lucovsky.org>
Fri, 11 Feb 2022 15:38:45 +0000 (10:38 -0500)
Issue: 4550

This commit modifies the "stack trace on signal" to propagate the
original signal received instead of always raising SIGABRT.

src/suricata.c

index 5632846515c5df67151c88bcbb1db2cb344c8e76..b05eee0c751d06ef5d63a17fea3f6503eb0a329a 100644 (file)
@@ -306,6 +306,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));
@@ -338,9 +341,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 */