[lxc-devel] [PATCH] Process command line is null terminated

Serge Hallyn serge.hallyn at ubuntu.com
Wed Feb 4 14:58:13 UTC 2015


Quoting Tycho Andersen (tycho.andersen at canonical.com):
> 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>

Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.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
> 
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel


More information about the lxc-devel mailing list