From: Tycho Andersen Date: Mon, 16 Nov 2015 22:12:36 +0000 (-0700) Subject: don't truncate environment sometimes in setproctitle X-Git-Tag: lxc-2.0.0.beta1~59 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=058b94fe0e3c6254c98911bfedb5695c825a8be2;p=thirdparty%2Flxc.git don't truncate environment sometimes in setproctitle Instead, let's just allocate new space for the proctitle to live and point the kernel at that. v2: take out testing hunk v3: check return from realloc Signed-off-by: Tycho Andersen Acked-by: Serge E. Hallyn --- diff --git a/src/lxc/utils.c b/src/lxc/utils.c index dac641885..ad9b0a294 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,21 @@ 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) { + /* 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) { + void *m; + m = realloc(proctitle, len); + if (!m) return -1; - } + proctitle = m; + arg_start = (unsigned long) proctitle; } + arg_end = arg_start + len; + brk_val = syscall(__NR_brk, 0); prctl_map = (struct prctl_mm_map) {