Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Dec 2017 17:25:25 +0100
From:      Jilles Tjoelker <jilles@stack.nl>
To:        Antoine Brodin <antoine@freebsd.org>
Cc:        Mateusz Guzik <mjg@freebsd.org>, David Chisnall <theraven@freebsd.org>, src-committers <src-committers@freebsd.org>, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r325726 - head/sys/kern
Message-ID:  <20171228162525.GA32705@stack.nl>
In-Reply-To: <CAALwa8nX_HwdayRmJkC3bBqZV6UmOUfpa29rpGhB8gT2%2Bp2XKQ@mail.gmail.com>
References:  <201711112239.vABMdXS2053880@repo.freebsd.org> <CAALwa8nX_HwdayRmJkC3bBqZV6UmOUfpa29rpGhB8gT2%2Bp2XKQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Dec 28, 2017 at 12:40:31PM +0000, Antoine Brodin wrote:
> On Sat, Nov 11, 2017 at 10:39 PM, Mateusz Guzik <mjg@freebsd.org> wrote:
> > Author: mjg
> > Date: Sat Nov 11 22:39:33 2017
> > New Revision: 325726
> > URL: https://svnweb.freebsd.org/changeset/base/325726

> > Log:
> >   Avoid locking and refing in sysctl_kern_proc_args if possible.

> >   Turns out the sysctl is called a lot e.g. by pkg-static.

> > Modified:
> >   head/sys/kern/kern_proc.c

> There is a regression after this commit: x11-toolkits/gnustep-gui no
> longer builds.
> You can find a failure log at
> http://pb2.nyi.freebsd.org/data/111i386-default-PR224618/2017-12-28_12h28m51s/logs/errors/gnustep-gui-0.25.1_3.log
> The failure seems to be from lang/gnustep-base:

>   /* get the argument vectors */
>   vectors = kvm_getargv(kptr, proc_ptr, 0);

It looks like the new fast path only works properly if p->p_args is not
NULL. If p->p_args is NULL, this usually means that the arguments are
longer than ps_arg_cache_limit and must be retrieved from (pageable)
process memory and not wired p->p_args->ar_args. It is possible to
duplicate that piece of code as well but that is probably not worth it.

A simple reproducer is

sh -c 'n=$(sysctl -n kern.ps_arg_cache_limit);
exec ps -p "$$" -o "args=$(printf "%0${n}d" 0)"'

On head, the second line is [ps] indicating that KERN_PROC_ARGS did not
return the expected string. On stable/10 and stable/11, the second line
is a truncated version of the command line like
ps -p 86963 -o args=0000000000000000000000000000000000000000000000000000000000

A prerequisite for this reproducer is that kern.ps_arg_cache_limit is
not set so high that it is impractical to exceed it but not {ARG_MAX}.

-- 
Jilles Tjoelker



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20171228162525.GA32705>