]> granicus.if.org Git - procps-ng/commitdiff
ps: for abnormal end allow core dumps (fix qualys bug)
authorJim Warner <james.warner@comcast.net>
Sat, 4 Jan 2020 06:00:00 +0000 (00:00 -0600)
committerCraig Small <csmall@dropbear.xyz>
Sun, 5 Jan 2020 22:11:20 +0000 (09:11 +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 7bd4f0b6d7e058197ccf4234f2a0bcc17550d0a6

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

index a7eee15e0554076bc31cb30959e609f41fb08304..bec232313e4d57a4c1fca0394490513065c4c496 100644 (file)
@@ -44,6 +44,10 @@ long Hertz;
 
 /* just reports a crash */
 static void signal_handler(int signo){
+  sigset_t ss;
+
+  sigfillset(&ss);
+  sigprocmask(SIG_BLOCK, &ss, NULL);
   if(signo==SIGPIPE) _exit(0);  /* "ps | head" will cause this */
   /* fprintf() is not reentrant, but we _exit() anyway */
   fprintf(stderr,
@@ -61,6 +65,9 @@ static void signal_handler(int signo){
     default:
       error_at_line(0, 0, __FILE__, __LINE__, "%s", _("please report this bug"));
       signal(signo, SIG_DFL);  /* allow core file creation */
+      sigemptyset(&ss);
+      sigaddset(&ss, signo);
+      sigprocmask(SIG_UNBLOCK, &ss, NULL);
       kill(getpid(), signo);
       _exit(EXIT_FAILURE);
   }