FreeBSD src
Go to file
Mariusz Zaborski 6ba108e52d 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
2021-06-24 20:14:31 +02:00
.cirrus-ci Cirrus-CI: retry pkg installation on failure 2021-06-02 22:41:20 -04:00
.github [skip ci] volunteer to maintain POSIX AIO 2021-05-30 17:21:12 -06:00
bin pkgbase: Put chio in utilities 2021-06-19 17:49:44 +02:00
cddl pkgbase: Put dtrace in its own package 2021-06-19 17:49:31 +02:00
contrib Disable llvm generating 128-bit multiply libcalls on 32-bit ARM 2021-06-22 22:26:13 +02:00
crypto kerberos.8: Replace dead link 2021-05-16 01:37:09 -04:00
etc Merge llvm-project 12.0.1 rc2 2021-06-19 20:09:28 +02:00
gnu dialog: fix macro redefinition 2021-03-01 16:01:44 +01:00
include Reduce code duplication in machine/_types.h 2021-06-14 16:30:16 +01:00
kerberos5 kerberos5: fix the WITH_OPENLDAP build 2021-01-30 00:07:50 -06:00
lib vdso: lower precision of vdso implementation of CLOCK_MONOTONIC_FAST and CLOCK_UPTIME_FAST 2021-06-24 00:36:33 +03:00
libexec rc.subr: use _pidcmd to determine pid for protect 2021-06-24 20:14:31 +02:00
release EC2: Tell gptboot to skip its 3 second wait 2021-06-21 15:37:15 -07:00
rescue ping: add a ping6 hard link for backwards compatibility 2020-11-26 18:33:04 +00:00
sbin devctl: add ADDR_ADD and ADDR_DEL devctl event for IFNET 2021-06-23 10:26:56 -06:00
secure secure/caroot, certctl: Rename secure/caroot/blacklisted 2021-06-18 13:38:07 +01:00
share bsd-family-tree: add DragonFly 6.0.0 2021-06-24 10:43:18 -06:00
stand libsa: Add tslog support for arm64 2021-06-23 22:21:23 -07:00
sys Update ENA version to v2.4.0 2021-06-24 16:35:40 +02:00
targets Remove svnlite. 2021-06-11 14:56:41 -07:00
tests fusefs: ensure that FUSE ops' headers' unique values are actually unique 2021-06-19 14:45:29 -06:00
tools Merge llvm-project 12.0.1 rc2 2021-06-19 20:09:28 +02:00
usr.bin mkimg: Add fat32lba partition type 2021-06-21 21:04:58 -04:00
usr.sbin bsdinstall: Avoid double-mounting /dev 2021-06-23 21:24:53 +00:00
.arcconfig Remove history.immutable from .arcconfig 2021-04-13 12:36:25 +01:00
.arclint arc lint: ignore /tests/ in chmod 2017-12-19 03:38:06 +00:00
.cirrus.yml Cirrus-CI: Use the default Git history depth 2021-06-07 18:50:18 -04:00
.clang-format clang-format: Avoid breaking after the opening paren of function definitions 2020-10-28 11:54:00 +00:00
.gitattributes Add a basic clang-format configuration file 2019-06-07 15:23:52 +00:00
.gitignore gitignore: Add .clangd and .ccls-cache 2021-06-04 16:56:08 +08:00
COPYRIGHT copyrights: Happy New Year 2021 2020-12-31 10:29:44 -05:00
LOCKS LOCKS: update current locks 2018-06-09 03:08:04 +00:00
MAINTAINERS [skip ci] volunteer to maintain POSIX AIO 2021-05-30 17:21:12 -06:00
Makefile Remove 'make update'. 2021-06-11 14:56:28 -07:00
Makefile.inc1 Remove svnlite. 2021-06-11 14:56:41 -07:00
Makefile.libcompat libpmc: always generate libpmc_events.c 2021-05-31 17:39:05 -03:00
Makefile.sys.inc AUTO_OBJ: For all top-level targets enforce using an OBJDIR. 2017-12-05 21:29:47 +00:00
ObsoleteFiles.inc Merge llvm-project 12.0.1 rc2 2021-06-19 20:09:28 +02:00
README.md Whitespace cleanup 2021-03-12 19:57:58 +08:00
RELNOTES relnotes: fix wording for gconcat entry. 2021-06-14 17:52:59 -06:00
UPDATING UPDATING: Fix typo 2021-06-22 08:47:27 -06:00

FreeBSD Source:

This is the top level of the FreeBSD source directory.

FreeBSD is an operating system used to power modern servers, desktops, and embedded platforms. A large community has continually developed it for more than thirty years. Its advanced networking, security, and storage features have made FreeBSD the platform of choice for many of the busiest web sites and most pervasive embedded networking and storage devices.

For copyright information, please see the file COPYRIGHT in this directory. Additional copyright information also exists for some sources in this tree - please see the specific source directories for more information.

The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7), config(8), FreeBSD handbook on building userland, and Handbook for kernels for more information, including setting make(1) variables.

Source Roadmap:

Directory Description
bin System/user commands.
cddl Various commands and libraries under the Common Development and Distribution License.
contrib Packages contributed by 3rd parties.
crypto Cryptography stuff (see crypto/README).
etc Template files for /etc.
gnu Various commands and libraries under the GNU Public License. Please see gnu/COPYING and gnu/COPYING.LIB for more information.
include System include files.
kerberos5 Kerberos5 (Heimdal) package.
lib System libraries.
libexec System daemons.
release Release building Makefile & associated tools.
rescue Build system for statically linked /rescue utilities.
sbin System commands.
secure Cryptographic libraries and commands.
share Shared resources.
stand Boot loader sources.
sys Kernel sources.
sys/arch/conf Kernel configuration files. GENERIC is the configuration used in release builds. NOTES contains documentation of all possible entries.
tests Regression tests which can be run by Kyua. See tests/README for additional information.
tools Utilities for regression testing and miscellaneous tasks.
usr.bin User commands.
usr.sbin System administration commands.

For information on synchronizing your source tree with one or more of the FreeBSD Project's development branches, please see FreeBSD Handbook.