]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
Process command line is null terminated
authorTycho Andersen <tycho.andersen@canonical.com>
Wed, 4 Feb 2015 12:02:02 +0000 (14:02 +0200)
committerStéphane Graber <stgraber@ubuntu.com>
Sun, 8 Feb 2015 16:08:39 +0000 (18:08 +0200)
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@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
src/lxc/utils.c

index f730f0cd2ada5c7eb1d865ea455110cddb0801c8..e66a01f0c1edb82817eedfc550ded10802543ce9 100644 (file)
@@ -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);