[lxc-devel] [PATCH] correctly install signal handler for lxc-init

J. Xiao jian at linux.vnet.ibm.com
Mon Dec 5 17:04:24 UTC 2011


This patch is to correct the manipulation of signal masks when
installing signal handlers for lxc-init.

Signed-off-by: Jian Xiao<jian at linux.vnet.ibm.com>
Signed-off-by: Greg Kurz<gkurz at fr.ibm.com>

---
  src/lxc/lxc_init.c |   22 +++++++++++++++++++---
  1 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/lxc/lxc_init.c b/src/lxc/lxc_init.c
index a534b51..0353dbc 100644
--- a/src/lxc/lxc_init.c
+++ b/src/lxc/lxc_init.c
@@ -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);
--







More information about the lxc-devel mailing list