Hey, On Thu, Jan 16, 2014 at 11:03 AM, Stéphane Graber <stgra...@ubuntu.com> wrote: > On Thu, Jan 16, 2014 at 03:30:01PM +0800, Qiang Huang wrote: >> Look through all LXC code and seems like only here are missed. >> >> Signed-off-by: Qiang Huang <h.huangqi...@huawei.com> > > Acked-by: Stéphane Graber <stgra...@ubuntu.com>
Looks like lxc-execute stopped working after this patch [caglar@qp:~/go/src/github.com/caglar10ur/lxc(devel)] sudo lxc-execute -n t -- ls lxc-init: Invalid argument - failed to sigaction reverting the commit makes it functional again [caglar@qp:~/go/src/github.com/caglar10ur/lxc(devel)] sudo lxc-execute -n t -- ls LICENSE Makefile README.md const.go container.go examples lxc.c lxc.go lxc.h lxc_test.go type.go util.go >> --- >> 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 >> > > -- > Stéphane Graber > Ubuntu developer > http://www.ubuntu.com > > _______________________________________________ > lxc-devel mailing list > lxc-devel@lists.linuxcontainers.org > http://lists.linuxcontainers.org/listinfo/lxc-devel > -- S.Çağlar Onur <cag...@10ur.org> _______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel