From: Christian Brauner Date: Sun, 31 Dec 2017 00:48:01 +0000 (+0100) Subject: start: non-functional changes X-Git-Tag: lxc-2.0.10~413 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a7cc8f78402c81f9b2b27482210c67c130ba2f9c;p=thirdparty%2Flxc.git start: non-functional changes Signed-off-by: Christian Brauner --- diff --git a/src/lxc/start.c b/src/lxc/start.c index ea272106b..4a9132d0f 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -257,35 +257,36 @@ restart: static int setup_signal_fd(sigset_t *oldmask) { + int ret, sig; sigset_t mask; - int fd; + int signals[] = {SIGBUS, SIGILL, SIGSEGV, SIGWINCH}; /* Block everything except serious error signals. */ - if (sigfillset(&mask) || - sigdelset(&mask, SIGILL) || - sigdelset(&mask, SIGSEGV) || - sigdelset(&mask, SIGBUS) || - sigdelset(&mask, SIGWINCH) || - sigprocmask(SIG_BLOCK, &mask, oldmask)) { - SYSERROR("Failed to set signal mask."); - return -1; + ret = sigfillset(&mask); + if (ret < 0) + return -EBADF; + + for (sig = 0; sig < (sizeof(signals) / sizeof(signals[0])); sig++) { + ret = sigdelset(&mask, signals[sig]); + if (ret < 0) + return -EBADF; } - fd = signalfd(-1, &mask, 0); - if (fd < 0) { - SYSERROR("Failed to create signal file descriptor."); - return -1; + ret = sigprocmask(SIG_BLOCK, &mask, oldmask); + if (ret < 0) { + SYSERROR("Failed to set signal mask"); + return -EBADF; } - if (fcntl(fd, F_SETFD, FD_CLOEXEC)) { - SYSERROR("Failed to set FD_CLOEXEC on the signal file descriptor: %d.", fd); - close(fd); - return -1; + ret = signalfd(-1, &mask, SFD_CLOEXEC); + if (ret < 0) { + SYSERROR("Failed to create signal file descriptor"); + return -EBADF; } - DEBUG("Set SIGCHLD handler with file descriptor: %d.", fd); + TRACE("Created signal file descriptor %d", ret); - return fd; + return ret; } static int signal_handler(int fd, uint32_t events, void *data,