opr: Allow softsig handlers for SIGFPE 80/14080/6
authorAndrew Deason <adeason@sinenomine.net>
Fri, 21 Feb 2020 20:49:56 +0000 (15:49 -0500)
committerBenjamin Kaduk <kaduk@mit.edu>
Thu, 1 Jul 2021 16:56:08 +0000 (12:56 -0400)
SIGFPE is normally a synchronous signal, which would not be handled by
opr softsig. However, bosserver uses SIGFPE as an asynchronous signal
to modify the local restricted mode. So allow SIGFPE in softsig
handlers, so bosserver can use softsig.

Change-Id: I413edbed967babb3e60c6fa97f89b40b8d7b3ad7
Reviewed-on: https://gerrit.openafs.org/14080
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>

src/opr/softsig.c

index fa4fcad..e3cbd53 100644 (file)
@@ -55,7 +55,6 @@ softsigSignalSet(sigset_t *set)
     sigdelset(set, SIGCONT);
     sigdelset(set, SIGABRT);
     sigdelset(set, SIGBUS);
-    sigdelset(set, SIGFPE);
     sigdelset(set, SIGILL);
     sigdelset(set, SIGPIPE);
     sigdelset(set, SIGSEGV);
@@ -159,6 +158,13 @@ opr_softsig_Init(void)
     opr_Verify(opr_softsig_Register(SIGQUIT, ExitHandler) == 0);
     opr_Verify(opr_softsig_Register(SIGTSTP, StopHandler) == 0);
 
+    /*
+     * Some of our callers do actually specify a SIGFPE handler, but make sure
+     * the default SIGFPE behavior does actually terminate the process, in case
+     * we get a real FPE.
+     */
+    opr_Verify(opr_softsig_Register(SIGFPE, ExitHandler) == 0);
+
     /* Create a signal handler thread which will respond to any incoming signals
      * for us. */
     opr_Verify(pthread_create(&handlerThread, NULL, signalHandler, NULL) == 0);