From 55684fd82245e9b0a2c4436360b2b58a23a2472a Mon Sep 17 00:00:00 2001 From: Long Wang Date: Wed, 5 Jul 2017 10:53:02 +0800 Subject: [PATCH 1/4] lxc-init: add comment for exclude 32 and 33 signals Signed-off-by: Long Wang --- src/lxc/tools/lxc_init.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lxc/tools/lxc_init.c b/src/lxc/tools/lxc_init.c index 07d8f1159..07ef69640 100644 --- a/src/lxc/tools/lxc_init.c +++ b/src/lxc/tools/lxc_init.c @@ -143,7 +143,8 @@ int main(int argc, char *argv[]) /* Exclude some signals: ILL, SEGV and BUS are likely to * reveal a bug and we want a core. STOP and KILL cannot be - * handled anyway: they're here for documentation. + * handled anyway: they're here for documentation. 32 and 33 + * are not defined. */ if (i == SIGILL || i == SIGSEGV || From 1bfb12006f7127bec8138f3b75bc9c4e79dc389c Mon Sep 17 00:00:00 2001 From: Long Wang Date: Wed, 5 Jul 2017 10:57:14 +0800 Subject: [PATCH 2/4] lxc-init: non-functional changes This patch mainly update the message format to: * upper the first letter * end without a dot all changes are relate to `lxc-init` Signed-off-by: Long Wang --- src/lxc/error.c | 4 ++-- src/lxc/initutils.c | 14 +++++++------- src/lxc/tools/lxc_init.c | 24 +++++++++--------------- 3 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/lxc/error.c b/src/lxc/error.c index b7fb687fe..81d6a376e 100644 --- a/src/lxc/error.c +++ b/src/lxc/error.c @@ -46,12 +46,12 @@ extern int lxc_error_set_and_log(int pid, int status) if (WIFEXITED(status)) { ret = WEXITSTATUS(status); if (ret) - INFO("Child <%d> ended on error (%d).", pid, ret); + INFO("Child <%d> ended on error (%d)", pid, ret); } if (WIFSIGNALED(status)) { int signal = WTERMSIG(status); - INFO("Child <%d> ended on signal (%d).", pid, signal); + INFO("Child <%d> ended on signal (%d)", pid, signal); } return ret; diff --git a/src/lxc/initutils.c b/src/lxc/initutils.c index 8d9016cd0..c190d6d50 100644 --- a/src/lxc/initutils.c +++ b/src/lxc/initutils.c @@ -30,10 +30,10 @@ static int mount_fs(const char *source, const char *target, const char *type) { /* the umount may fail */ if (umount(target)) - WARN("failed to unmount %s : %s", target, strerror(errno)); + WARN("Failed to unmount %s : %s", target, strerror(errno)); if (mount(source, target, type, 0, NULL)) { - ERROR("failed to mount %s : %s", target, strerror(errno)); + ERROR("Failed to mount %s : %s", target, strerror(errno)); return -1; } @@ -45,26 +45,26 @@ static int mount_fs(const char *source, const char *target, const char *type) extern void lxc_setup_fs(void) { if (mount_fs("proc", "/proc", "proc")) - INFO("failed to remount proc"); + INFO("Failed to remount proc"); /* if /dev has been populated by us, /dev/shm does not exist */ if (access("/dev/shm", F_OK) && mkdir("/dev/shm", 0777)) - INFO("failed to create /dev/shm"); + INFO("Failed to create /dev/shm"); /* if we can't mount /dev/shm, continue anyway */ if (mount_fs("shmfs", "/dev/shm", "tmpfs")) - INFO("failed to mount /dev/shm"); + INFO("Failed to mount /dev/shm"); /* If we were able to mount /dev/shm, then /dev exists */ /* Sure, but it's read-only per config :) */ if (access("/dev/mqueue", F_OK) && mkdir("/dev/mqueue", 0666)) { - DEBUG("failed to create '/dev/mqueue'"); + DEBUG("Failed to create '/dev/mqueue'"); return; } /* continue even without posix message queue support */ if (mount_fs("mqueue", "/dev/mqueue", "mqueue")) - INFO("failed to mount /dev/mqueue"); + INFO("Failed to mount /dev/mqueue"); } static char *copy_global_config_value(char *p) diff --git a/src/lxc/tools/lxc_init.c b/src/lxc/tools/lxc_init.c index 07ef69640..aeb1bba29 100644 --- a/src/lxc/tools/lxc_init.c +++ b/src/lxc/tools/lxc_init.c @@ -119,7 +119,7 @@ int main(int argc, char *argv[]) lxc_log_options_no_override(); if (!argv[optind]) { - ERROR("missing command to launch"); + ERROR("Missing command to launch"); exit(EXIT_FAILURE); } @@ -134,7 +134,7 @@ int main(int argc, char *argv[]) sigdelset(&mask, SIGSEGV) || sigdelset(&mask, SIGBUS) || sigprocmask(SIG_SETMASK, &mask, &omask)) { - SYSERROR("failed to set signal mask"); + SYSERROR("Failed to set signal mask"); exit(EXIT_FAILURE); } @@ -160,14 +160,14 @@ int main(int argc, char *argv[]) sigdelset(&act.sa_mask, SIGBUS) || sigdelset(&act.sa_mask, SIGSTOP) || sigdelset(&act.sa_mask, SIGKILL)) { - ERROR("failed to set signal"); + ERROR("Failed to set signal"); exit(EXIT_FAILURE); } act.sa_flags = 0; act.sa_handler = interrupt_handler; if (sigaction(i, &act, NULL) && errno != EINVAL) { - SYSERROR("failed to sigaction"); + SYSERROR("Failed to sigaction"); exit(EXIT_FAILURE); } } @@ -175,32 +175,30 @@ int main(int argc, char *argv[]) lxc_setup_fs(); pid = fork(); - if (pid < 0) exit(EXIT_FAILURE); if (!pid) { - /* restore default signal handlers */ for (i = 1; i < NSIG; i++) signal(i, SIG_DFL); if (sigprocmask(SIG_SETMASK, &omask, NULL)) { - SYSERROR("failed to set signal mask"); + SYSERROR("Failed to set signal mask"); exit(EXIT_FAILURE); } - NOTICE("about to exec '%s'", aargv[0]); + NOTICE("About to exec '%s'", aargv[0]); execvp(aargv[0], aargv); - ERROR("failed to exec: '%s' : %s", aargv[0], strerror(errno)); + ERROR("Failed to exec: '%s' : %s", aargv[0], strerror(errno)); exit(err); } /* let's process the signals now */ if (sigdelset(&omask, SIGALRM) || sigprocmask(SIG_SETMASK, &omask, NULL)) { - SYSERROR("failed to set signal mask"); + SYSERROR("Failed to set signal mask"); exit(EXIT_FAILURE); } @@ -214,10 +212,8 @@ int main(int argc, char *argv[]) pid_t waited_pid; switch (was_interrupted) { - case 0: break; - case SIGPWR: case SIGTERM: if (!shutdown) { @@ -226,11 +222,9 @@ int main(int argc, char *argv[]) alarm(1); } break; - case SIGALRM: kill(-1, SIGKILL); break; - default: kill(pid, was_interrupted); break; @@ -244,7 +238,7 @@ int main(int argc, char *argv[]) if (errno == EINTR) continue; - ERROR("failed to wait child : %s", + ERROR("Failed to wait child : %s", strerror(errno)); goto out; } From 1574fc24956f72f113b26a8f0778c679265059a5 Mon Sep 17 00:00:00 2001 From: Long Wang Date: Wed, 5 Jul 2017 11:54:25 +0800 Subject: [PATCH 3/4] lxc-init: adjust include statements * Use `#include ` style for exported haeders. * remove used header `caps.h` Signed-off-by: Long Wang --- src/lxc/tools/lxc_init.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lxc/tools/lxc_init.c b/src/lxc/tools/lxc_init.c index aeb1bba29..8b29974b1 100644 --- a/src/lxc/tools/lxc_init.c +++ b/src/lxc/tools/lxc_init.c @@ -33,11 +33,11 @@ #include #include +#include + #include "log.h" -#include "caps.h" #include "error.h" #include "initutils.h" -#include "lxccontainer.h" lxc_log_define(lxc_init, lxc); From 16affc24a56303204baf1aa76f66a0a0546cebfb Mon Sep 17 00:00:00 2001 From: Long Wang Date: Wed, 5 Jul 2017 12:01:16 +0800 Subject: [PATCH 4/4] lxc-init: move initialization of act to outside of the loop Signed-off-by: Long Wang --- src/lxc/tools/lxc_init.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/lxc/tools/lxc_init.c b/src/lxc/tools/lxc_init.c index 8b29974b1..6b2355be7 100644 --- a/src/lxc/tools/lxc_init.c +++ b/src/lxc/tools/lxc_init.c @@ -81,6 +81,7 @@ int main(int argc, char *argv[]) int err; char **aargv; sigset_t mask, omask; + struct sigaction act; int i, have_status = 0, shutdown = 0; int opt; char *lxcpath = NULL, *name = NULL, *logpriority = NULL; @@ -138,9 +139,19 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } - for (i = 1; i < NSIG; i++) { - struct sigaction act; + 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; + for (i = 1; i < NSIG; i++) { /* Exclude some signals: ILL, SEGV and BUS are likely to * reveal a bug and we want a core. STOP and KILL cannot be * handled anyway: they're here for documentation. 32 and 33 @@ -154,18 +165,6 @@ int main(int argc, char *argv[]) i == 32 || i == 33) continue; - 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; if (sigaction(i, &act, NULL) && errno != EINVAL) { SYSERROR("Failed to sigaction"); exit(EXIT_FAILURE);