rc.subr: use _pidcmd to determine pid for protect
This is a more reliable method that accounts for existing pidfiles, procname and interpreter settings. Current method of obtaining the pid for oomprotect="YES"|"ALL" processes in certain cases fails to find a unique pid. One such case are rc.d scripts defining command as: command="daemon" which results in all processes started via daemon being selected and passed to protect(1) which fails and prints usage: $ /etc/rc.d/exampled restart Stopping exampled. Starting exampled. usage: protect [-i] command protect [-cdi] -g pgrp | -p pid Running the same with -x reveals what happens: + pid='3051 4268 4390 4421 4427 4470 4588 4733 4740 4870 4949 4954 4979 5835 5866 55487 55583 56525 57643 57789 57882 58072 58167 99419' + /usr/bin/protect -p 3051 4268 4390 4421 4427 4470 4588 4733 4740 4870 4949 4954 4979 5835 5866 55487 55583 56525 57643 57789 57882 58072 58167 99419 usage: protect [-i] command protect [-cdi] -g pgrp | -p pid We have a more reliable way of obtaining pid already defined in rc.subr and available when protect(1) needs it. We can simply `eval $_pidcmd` which also invokes `check_process` but properly accounts for existing pidfile, procname and interpreter settings. With the change the pidfile is properly obtained. Submitted by: Adam Wolk <a.wolk at fudosecurity.com> Sponsored by: Fudo Security Differential Revision: https://reviews.freebsd.org/D30367
This commit is contained in:
parent
779b70a226
commit
6ba108e52d
@ -1272,13 +1272,13 @@ $command $rc_flags $command_args"
|
||||
# We cannot use protect(1) inside jails.
|
||||
if [ -n "$_oomprotect" ] && [ -f "${PROTECT}" ] &&
|
||||
[ "$(sysctl -n security.jail.jailed)" -eq 0 ]; then
|
||||
pid=$(check_process $command)
|
||||
[ -z "${rc_pid}" ] && eval $_pidcmd
|
||||
case $_oomprotect in
|
||||
[Aa][Ll][Ll])
|
||||
${PROTECT} -i -p ${pid}
|
||||
${PROTECT} -i -p ${rc_pid}
|
||||
;;
|
||||
[Yy][Ee][Ss])
|
||||
${PROTECT} -p ${pid}
|
||||
${PROTECT} -p ${rc_pid}
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
Loading…
Reference in New Issue
Block a user