]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
correctly install signal handler for lxc-init
authorJian Xiao <jian@linux.vnet.ibm.com>
Thu, 23 Feb 2012 08:57:13 +0000 (09:57 +0100)
committerDaniel Lezcano <daniel.lezcano@free.fr>
Thu, 23 Feb 2012 08:57:13 +0000 (09:57 +0100)
This patch is to correct the manipulation of signal masks when
installing signal handlers for lxc-init.

Signed-off-by: Jian Xiao <jian@linux.vnet.ibm.com>
Signed-off-by: Greg Kurz <gkurz@fr.ibm.com>
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
src/lxc/lxc_init.c

index a534b51e1593c0af83e3206be2a8fed786f2bac3..2263cd16f1c1a1d9b6d07c3e2245bf11c8e69264 100644 (file)
@@ -95,15 +95,31 @@ int main(int argc, char *argv[])
         * signal handler and to fork
         */
        sigfillset(&mask);
+       sigdelset(&mask, SIGILL);
+       sigdelset(&mask, SIGSEGV);
+       sigdelset(&mask, SIGBUS);
        sigprocmask(SIG_SETMASK, &mask, &omask);
 
        for (i = 1; i < NSIG; i++) {
                struct sigaction act;
 
+               /* Exclude some signals: ILL, SEGV and BUS are likely to
+                * reveal a bug and we want a core. STOP and KILL cannot be
+                * handled anyway: they're here for documentation.
+                */
+               if (i == SIGILL ||
+                   i == SIGSEGV ||
+                   i == SIGBUS ||
+                   i == SIGSTOP ||
+                   i == SIGKILL)
+                       continue;
+
                sigfillset(&act.sa_mask);
-               sigdelset(&mask, SIGILL);
-               sigdelset(&mask, SIGSEGV);
-               sigdelset(&mask, SIGBUS);
+               sigdelset(&act.sa_mask, SIGILL);
+               sigdelset(&act.sa_mask, SIGSEGV);
+               sigdelset(&act.sa_mask, SIGBUS);
+               sigdelset(&act.sa_mask, SIGSTOP);
+               sigdelset(&act.sa_mask, SIGKILL);
                act.sa_flags = 0;
                act.sa_handler = interrupt_handler;
                sigaction(i, &act, NULL);