From: Jim Warner Date: Sat, 4 Jan 2020 06:00:00 +0000 (-0600) Subject: top: at abnormal end allow core dumps (fix qualys bug) X-Git-Tag: v4.0.0~401 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1d73eb567c1811e12b174a26629821c7bf0138bf;p=procps-ng top: at abnormal end allow core dumps (fix qualys bug) 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 e1f419737f01618181686281ae98347e03163e56 Signed-off-by: Jim Warner --- diff --git a/top/top.c b/top/top.c index 31e54eab..d19d1bd3 100644 --- a/top/top.c +++ b/top/top.c @@ -430,18 +430,22 @@ static void error_exit (const char *str) { /* * Catches all remaining signals not otherwise handled */ +static void sig_abexit (int sig) __attribute__((__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