[lxc-devel] [PATCH] correctly install signal handler for lxc-init
jian at linux.vnet.ibm.com
jian at linux.vnet.ibm.com
Tue Jan 24 20:45:51 UTC 2012
From: Jian Xiao <jian at linux.vnet.ibm.com>
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);
--
1.7.1
More information about the lxc-devel
mailing list