Fix sysctl kern.proc.args on self if args are long after r325726

Authored by jilles on Jan 1 2018, 10:43 PM.



Since r325726, sysctl kern.proc.args on the current process no longer
works if the arguments are longer than the value of the sysctl

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.
Therefore, skip the fast path if p->p_args is NULL.

This breaks building x11-toolkits/gnustep-gui with log

Test Plan

Build and install the kernel, and run

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

The last line of the output should be something like

ps -p 86963 -o args=0000000000000000000000000000000000000000000000000000000000

and not


Diff Detail

rS FreeBSD src repository
Lint OK
No Unit Test Coverage
Build Status
Buildable 14046
Build 14233: arc lint + arc unit
jilles created this revision.Jan 1 2018, 10:43 PM
jilles abandoned this revision.Jan 20 2018, 10:54 PM

This was committed by antoine as rS327473.