[lxc-devel] [PATCH] don't truncate environment sometimes in setproctitle
Tycho Andersen
tycho.andersen at canonical.com
Mon Nov 16 21:53:07 UTC 2015
On Mon, Nov 16, 2015 at 02:49:56PM -0700, Tycho Andersen wrote:
> Instead, let's just allocate new space for the proctitle to live and point
> the kernel at that.
>
> Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
> ---
> src/lxc/lxccontainer.c | 2 +-
> src/lxc/utils.c | 29 +++++++++--------------------
> 2 files changed, 10 insertions(+), 21 deletions(-)
>
> diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
> index 5207255..c46d4f0 100644
> --- a/src/lxc/lxccontainer.c
> +++ b/src/lxc/lxccontainer.c
> @@ -762,7 +762,7 @@ static bool do_lxcapi_start(struct lxc_container *c, int useinit, char * const a
> * characters; all that it means is that the proctitle will be
> * ugly. Similarly, we also don't care if setproctitle()
> * fails. */
> - snprintf(title, sizeof(title), "[lxc monitor] %s %s", c->config_path, c->name);
> + snprintf(title, sizeof(title), "[lxc monitor this is a really long proctitle 01234567890123456789012345678901234567890012345678901234567890123456789012345678901234567890123456789012345678901234567890] %s %s", c->config_path, c->name);
Heh. Will resend without this hunk.
Tycho
> INFO("Attempting to set proc title to %s", title);
> setproctitle(title);
>
> 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