[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