Skip to content

Commit

Permalink
Process command line is null terminated
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Tycho Andersen authored and stgraber committed Feb 8, 2015
1 parent a61848f commit 96fe6d1
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions src/lxc/utils.c
Expand Up @@ -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;
Expand All @@ -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);
Expand Down

0 comments on commit 96fe6d1

Please sign in to comment.