Look through all LXC code and seems like only here are missed. Signed-off-by: Qiang Huang <h.huangqi...@huawei.com> --- Maybe this bug can be marked resolved: https://github.com/lxc/lxc/issues/83 --- src/lxc/lxc_init.c | 46 +++++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 15 deletions(-)
diff --git a/src/lxc/lxc_init.c b/src/lxc/lxc_init.c index d88a935..a59dd9c 100644 --- a/src/lxc/lxc_init.c +++ b/src/lxc/lxc_init.c @@ -123,11 +123,14 @@ int main(int argc, char *argv[]) * mask all the signals so we are safe to install a * signal handler and to fork */ - sigfillset(&mask); - sigdelset(&mask, SIGILL); - sigdelset(&mask, SIGSEGV); - sigdelset(&mask, SIGBUS); - sigprocmask(SIG_SETMASK, &mask, &omask); + if (sigfillset(&mask) || + sigdelset(&mask, SIGILL) || + sigdelset(&mask, SIGSEGV) || + sigdelset(&mask, SIGBUS) || + sigprocmask(SIG_SETMASK, &mask, &omask)) { + SYSERROR("failed to set signal mask"); + exit(EXIT_FAILURE); + } for (i = 1; i < NSIG; i++) { struct sigaction act; @@ -143,15 +146,22 @@ int main(int argc, char *argv[]) i == SIGKILL) continue; - sigfillset(&act.sa_mask); - 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); + if (sigfillset(&act.sa_mask) || + 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)) { + ERROR("failed to set signal"); + exit(EXIT_FAILURE); + } + act.sa_flags = 0; act.sa_handler = interrupt_handler; - sigaction(i, &act, NULL); + if (sigaction(i, &act, NULL)) { + SYSERROR("failed to sigaction"); + exit(EXIT_FAILURE); + } } lxc_setup_fs(); @@ -170,7 +180,10 @@ int main(int argc, char *argv[]) for (i = 1; i < NSIG; i++) signal(i, SIG_DFL); - sigprocmask(SIG_SETMASK, &omask, NULL); + if (sigprocmask(SIG_SETMASK, &omask, NULL)) { + SYSERROR("failed to set signal mask"); + exit(EXIT_FAILURE); + } NOTICE("about to exec '%s'", aargv[0]); @@ -180,8 +193,11 @@ int main(int argc, char *argv[]) } /* let's process the signals now */ - sigdelset(&omask, SIGALRM); - sigprocmask(SIG_SETMASK, &omask, NULL); + if (sigdelset(&omask, SIGALRM) || + sigprocmask(SIG_SETMASK, &omask, NULL)) { + SYSERROR("failed to set signal mask"); + exit(EXIT_FAILURE); + } /* no need of other inherited fds but stderr */ close(fileno(stdin)); -- 1.8.3 _______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel