[lxc-devel] [PATCH v2] don't truncate environment sometimes in setproctitle

Tycho Andersen tycho.andersen at canonical.com
Mon Nov 16 21:55:17 UTC 2015


Instead, let's just allocate new space for the proctitle to live and point
the kernel at that.

v2: take out testing hunk

Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
---
 src/lxc/utils.c | 29 +++++++++--------------------
 1 file changed, 9 insertions(+), 20 deletions(-)

diff --git a/src/lxc/utils.c b/src/lxc/utils.c
index dac6418..a5ec2ec 100644
--- a/src/lxc/utils.c
+++ b/src/lxc/utils.c
@@ -1349,6 +1349,7 @@ char *get_template_path(const char *t)
  */
 int setproctitle(char *title)
 {
+	static char *proctitle = NULL;
 	char buf[2048], *tmp;
 	FILE *f;
 	int i, len, ret = 0;
@@ -1413,28 +1414,16 @@ int setproctitle(char *title)
 	 * 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. */
-	if (len > env_end - arg_start) {
-		arg_end = env_end;
-		len = env_end - arg_start;
-		title[len-1] = '\0';
-	} else {
-		/* Only truncate the environment if we're actually going to
-		 * overwrite part of it. */
-		if (len >= arg_end - arg_start) {
-			env_start = env_end;
-		}
-
-		arg_end = arg_start + len;
-
-		/* check overflow */
-		if (arg_end < len || arg_end < arg_start) {
-			return -1;
-		}
-
+	/* If we don't have enough room by just overwriting the old proctitle,
+	 * let's allocate a new one.
+	 */
+	if (len > arg_end - arg_start) {
+		proctitle = realloc(proctitle, len);
+		arg_start = (unsigned long) proctitle;
 	}
 
+	arg_end = arg_start + len;
+
 	brk_val = syscall(__NR_brk, 0);
 
 	prctl_map = (struct prctl_mm_map) {
-- 
2.5.0



More information about the lxc-devel mailing list