[lxc-devel] [PATCH] Process command line is null terminated

Tycho Andersen tycho.andersen at canonical.com
Wed Feb 4 12:02:02 UTC 2015


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 <tycho.andersen at canonical.com>
---
 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 f730f0c..e66a01f 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.1.0



More information about the lxc-devel mailing list