From 279428ea0ea1522f0b95e55b7ac78e31642de59b Mon Sep 17 00:00:00 2001 From: Tycho Andersen Date: Wed, 4 Feb 2015 14:02:02 +0200 Subject: [PATCH] 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 --- src/lxc/utils.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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); -- 2.47.2