From: Ferenc Wagner <wf...@niif.hu> Signed-off-by: Ferenc Wagner <wf...@niif.hu> Signed-off-by: Daniel Lezcano <dlezc...@fr.ibm.com> --- src/lxc/start.c | 22 ++++++++++++++-------- 1 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/src/lxc/start.c b/src/lxc/start.c index dc57bea..92f44e3 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -195,13 +195,13 @@ static int setup_sigchld_fd(sigset_t *oldmask) sigset_t mask; int fd; - if (sigprocmask(SIG_BLOCK, NULL, &mask)) { - SYSERROR("failed to get mask signal"); - return -1; - } - - if (sigaddset(&mask, SIGCHLD) || sigprocmask(SIG_BLOCK, &mask, oldmask)) { - SYSERROR("failed to set mask signal"); + /* Block everything except serious error signals */ + if (sigfillset(&mask) || + sigdelset(&mask, SIGILL) || + sigdelset(&mask, SIGSEGV) || + sigdelset(&mask, SIGBUS) || + sigprocmask(SIG_BLOCK, &mask, oldmask)) { + SYSERROR("failed to set signal mask"); return -1; } @@ -231,7 +231,7 @@ static int sigchld_handler(int fd, void *data, ret = read(fd, &siginfo, sizeof(siginfo)); if (ret < 0) { - ERROR("failed to read sigchld info"); + ERROR("failed to read signal info"); return -1; } @@ -240,6 +240,12 @@ static int sigchld_handler(int fd, void *data, return -1; } + if (siginfo.ssi_signo != SIGCHLD) { + kill(*pid, siginfo.ssi_signo); + INFO("forwarded signal %d to pid %d", siginfo.ssi_signo, *pid); + return 0; + } + if (siginfo.ssi_code == CLD_STOPPED || siginfo.ssi_code == CLD_CONTINUED) { INFO("container init process was stopped/continued"); -- 1.7.0.4 ------------------------------------------------------------------------------ This SF.net email is sponsored by Sprint What will you do first with EVO, the first 4G phone? Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel