From: Jian Xiao Date: Thu, 23 Feb 2012 08:57:13 +0000 (+0100) Subject: correctly install signal handler for lxc-init X-Git-Tag: lxc-0.8.0-rc2~53 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5781a74a8af3057ce7b561f454e2b5b0925b1f76;p=thirdparty%2Flxc.git correctly install signal handler for lxc-init This patch is to correct the manipulation of signal masks when installing signal handlers for lxc-init. Signed-off-by: Jian Xiao Signed-off-by: Greg Kurz Signed-off-by: Daniel Lezcano --- diff --git a/src/lxc/lxc_init.c b/src/lxc/lxc_init.c index a534b51e1..2263cd16f 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);