[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