Page MenuHomeFreeBSD

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

Authored by jilles on Jan 1 2018, 10:43 PM.
Tags
None
Referenced Files
Unknown Object (File)
Mar 15 2024, 10:11 AM
Unknown Object (File)
Dec 22 2023, 10:53 PM
Unknown Object (File)
Aug 15 2023, 11:17 PM
Unknown Object (File)
Aug 14 2023, 12:28 PM
Unknown Object (File)
Jun 13 2023, 11:09 AM
Unknown Object (File)
May 27 2023, 1:19 PM
Unknown Object (File)
Apr 25 2023, 9:27 AM
Unknown Object (File)
Apr 7 2023, 4:16 PM
Subscribers

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 - subversion
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 14046
Build 14233: arc lint + arc unit