From: Tycho Andersen Date: Wed, 4 Feb 2015 12:02:02 +0000 (+0200) Subject: Process command line is null terminated X-Git-Tag: lxc-1.1.1~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=279428ea0ea1522f0b95e55b7ac78e31642de59b;p=thirdparty%2Flxc.git Process command line is null terminated It turns out the process command line is in fact null terminated on the stack; this caused a bug where when the new process title was smaller than the old one, the first environment entry would be rendered as part of the process title. Signed-off-by: Tycho Andersen Acked-by: Serge E. Hallyn --- diff --git a/src/lxc/utils.c b/src/lxc/utils.c index f730f0cd2..e66a01f0c 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c @@ -1604,9 +1604,12 @@ int setproctitle(char *title) return -1; } + /* Include the null byte here, because in the calculations below we + * want to have room for it. */ + len = strlen(title) + 1; + /* We're truncating the environment, so we should use at most the * length of the argument + environment for the title. */ - len = strlen(title); if (len > env_end - arg_start) { arg_end = env_end; len = env_end - arg_start; @@ -1619,9 +1622,7 @@ int setproctitle(char *title) arg_end = arg_start + len; } - - /* memcpy instead of strcpy since this isn't null terminated */ - memcpy((void*)arg_start, title, len); + strcpy((char*)arg_start, title); ret |= prctl(PR_SET_MM, PR_SET_MM_ARG_START, (long)arg_start, 0, 0); ret |= prctl(PR_SET_MM, PR_SET_MM_ARG_END, (long)arg_end, 0, 0);