]> granicus.if.org Git - procps-ng/commitdiff
top: at abnormal end allow core dumps (fix qualys bug)
authorJim Warner <james.warner@comcast.net>
Fri, 3 Jan 2020 06:00:00 +0000 (00:00 -0600)
committerCraig Small <csmall@dropbear.xyz>
Sun, 5 Jan 2020 22:13:29 +0000 (09:13 +1100)
A Qualys audit patch, represented in the commit below,
added the _exit() call to our abnormal signal handler.
Unfortunately, that disabled the associated core dump.

This patch restores expected behavior of those signals
whose default produces a core dump file + termination.

Reference(s):
commit 0847390b8335c1747a3ea0944123b2f594251bc0

Signed-off-by: Jim Warner <james.warner@comcast.net>
top/top.c

index 09b8ef9dccaa816d6b6b6ad021cb32ad6c00ba95..8e8c7d9dc82b328254d941f484c73415f153fc40 100644 (file)
--- a/top/top.c
+++ b/top/top.c
@@ -579,18 +579,22 @@ static void error_exit (const char *str) {
 
         /*
          * Catches all remaining signals not otherwise handled */
+static void sig_abexit (int sig) NORETURN;
 static void sig_abexit (int sig) {
    sigset_t ss;
 
-// POSIX.1-2004 async-signal-safe: sigfillset, sigprocmask, signal, raise
+// POSIX.1-2004 async-signal-safe: sigfillset, sigprocmask, signal, sigemptyset, sigaddset, raise
    sigfillset(&ss);
    sigprocmask(SIG_BLOCK, &ss, NULL);
    at_eoj();                 // restore tty in preparation for exit
    fprintf(stderr, N_fmt(EXIT_signals_fmt)
       , sig, signal_number_to_name(sig), Myname);
    signal(sig, SIG_DFL);     // allow core dumps, if applicable
+   sigemptyset(&ss);
+   sigaddset(&ss, sig);
+   sigprocmask(SIG_UNBLOCK, &ss, NULL);
    raise(sig);               // ( plus set proper return code )
-   _exit(sig | 0x80);        // if default sig action is ignore
+   _exit(EXIT_FAILURE);      // if default sig action is ignore
 } // end: sig_abexit