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

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

Details

Reviewers
mjg
Summary

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

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
http://pb2.nyi.freebsd.org/data/111i386-default-PR224618/2017-12-28_12h28m51s/logs/errors/gnustep-gui-0.25.1_3.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

[ps]

Diff Detail

Repository
rS FreeBSD src repository
Lint
Lint OK
Unit
No Unit Test Coverage
Build Status
Buildable 14046
Build 14233: arc lint + arc unit