* 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;
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();
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]);
}
/* 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));