The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/5491
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
From 5e9002a3ff7026c879e2ec29d7dd0d3782ce7794 Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Wed, 13 Feb 2019 23:40:52 +0100 Subject: [PATCH] lxd: remove /proc/self/cmdline parsing Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- lxd/main_nsexec.go | 53 +++++++++++----------------------------------- 1 file changed, 12 insertions(+), 41 deletions(-) diff --git a/lxd/main_nsexec.go b/lxd/main_nsexec.go index c03a5d24f0..e78354add5 100644 --- a/lxd/main_nsexec.go +++ b/lxd/main_nsexec.go @@ -42,17 +42,10 @@ extern void forkproxy(); extern void forkuevent(); // Command line parsing and tracking -#define CMDLINE_SIZE (8 * PATH_MAX) -char cmdline_buf[CMDLINE_SIZE]; -char *cmdline_cur = NULL; -ssize_t cmdline_size = -1; +size_t cmdline_index = 0; -char* advance_arg(bool required) { - while (*cmdline_cur != 0) - cmdline_cur++; - - cmdline_cur++; - if (cmdline_size <= cmdline_cur - cmdline_buf) { +char* advance_arg(char *argv[], bool required) { + if (!argv[cmdline_index++]) { if (!required) return NULL; @@ -60,7 +53,7 @@ char* advance_arg(bool required) { _exit(1); } - return cmdline_cur; + return argv[cmdline_index]; } void error(char *msg) @@ -210,46 +203,24 @@ void attach_userns(int pid) { } } -__attribute__((constructor)) void init(void) { - int cmdline; - - // Extract arguments - cmdline = open("/proc/self/cmdline", O_RDONLY); - if (cmdline < 0) { - error("error: open"); - _exit(232); - } - - memset(cmdline_buf, 0, sizeof(cmdline_buf)); - if ((cmdline_size = read(cmdline, cmdline_buf, sizeof(cmdline_buf)-1)) < 0) { - close(cmdline); - error("error: read"); - _exit(232); - } - close(cmdline); - - // Skip the first argument (but don't fail on missing second argument) - cmdline_cur = cmdline_buf; - while (*cmdline_cur != 0) - cmdline_cur++; - cmdline_cur++; - if (cmdline_size <= cmdline_cur - cmdline_buf) { +__attribute__((constructor)) void init(int argc, char *argv[]) { + if (!argv[1]) { checkfeature(); return; } // Intercepts some subcommands - if (strcmp(cmdline_cur, "forkfile") == 0) + if (strcmp(argv[1], "forkfile") == 0) forkfile(); - else if (strcmp(cmdline_cur, "forkmount") == 0) + else if (strcmp(argv[1], "forkmount") == 0) forkmount(); - else if (strcmp(cmdline_cur, "forknet") == 0) + else if (strcmp(argv[1], "forknet") == 0) forknet(); - else if (strcmp(cmdline_cur, "forkproxy") == 0) + else if (strcmp(argv[1], "forkproxy") == 0) forkproxy(); - else if (strcmp(cmdline_cur, "forkuevent") == 0) + else if (strcmp(argv[1], "forkuevent") == 0) forkuevent(); - else if (strncmp(cmdline_cur, "-", 1) == 0 || strcmp(cmdline_cur, "daemon") == 0) + else if (strncmp(argv[1], "-", 1) == 0 || strcmp(argv[1], "daemon") == 0) checkfeature(); } */
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel