aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/sys/procctl.2
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/sys/procctl.2')
-rw-r--r--lib/libc/sys/procctl.2857
1 files changed, 0 insertions, 857 deletions
diff --git a/lib/libc/sys/procctl.2 b/lib/libc/sys/procctl.2
deleted file mode 100644
index e269edb8acaa..000000000000
--- a/lib/libc/sys/procctl.2
+++ /dev/null
@@ -1,857 +0,0 @@
-.\" Copyright (c) 2013 Hudson River Trading LLC
-.\" Written by: John H. Baldwin <jhb@FreeBSD.org>
-.\" All rights reserved.
-.\"
-.\" Copyright (c) 2014 The FreeBSD Foundation
-.\" Portions of this documentation were written by Konstantin Belousov
-.\" under sponsorship from the FreeBSD Foundation.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.Dd April 15, 2023
-.Dt PROCCTL 2
-.Os
-.Sh NAME
-.Nm procctl
-.Nd control processes
-.Sh LIBRARY
-.Lb libc
-.Sh SYNOPSIS
-.In sys/procctl.h
-.Ft int
-.Fn procctl "idtype_t idtype" "id_t id" "int cmd" "void *data"
-.Sh DESCRIPTION
-The
-.Fn procctl
-system call provides for control over processes.
-The
-.Fa idtype
-and
-.Fa id
-arguments specify the set of processes to control.
-If multiple processes match the identifier,
-.Nm
-will make a
-.Dq best effort
-to control as many of the selected processes as possible.
-An error is only returned if no selected processes successfully complete
-the request.
-The following identifier types are supported:
-.Bl -tag -width P_PGID
-.It Dv P_PID
-Control the process with the process ID
-.Fa id .
-.Fa id
-zero is a shortcut for the calling process ID.
-.It Dv P_PGID
-Control processes belonging to the process group with the ID
-.Fa id .
-.El
-.Pp
-The control request to perform is specified by the
-.Fa cmd
-argument.
-.Pp
-All status changing requests
-.Dv *_CTL
-require the caller to have the right to debug the target.
-All status query requests
-.DV *_STATUS
-require the caller to have the right to observe the target.
-.Pp
-The following commands are supported:
-.Bl -tag -width PROC_TRAPCAP_STATUS
-.It Dv PROC_ASLR_CTL
-Controls the Address Space Layout Randomization (ASLR) in the program
-images created
-by
-.Xr execve 2
-in the specified process or its descendants that did not changed
-the control nor modified it by other means.
-The
-.Fa data
-parameter must point to the integer variable holding one of the following
-values:
-.Bl -tag -width PROC_ASLR_FORCE_DISABLE
-.It Dv PROC_ASLR_FORCE_ENABLE
-Request that ASLR is enabled after execution, even if it is disabled
-system-wide.
-The image flag and set-uid might prevent ASLR enablement still.
-.It Dv PROC_ASLR_FORCE_DISABLE
-Request that ASLR is disabled after execution.
-Same notes as for
-.Dv PROC_ASLR_FORCE_ENABLE
-apply.
-.It Dv PROC_ASLR_NOFORCE
-Use the system-wide configured policy for ASLR.
-.El
-.It Dv PROC_ASLR_STATUS
-Returns the current status of ASLR enablement for the target process.
-The
-.Fa data
-parameter must point to the integer variable, where one of the
-following values is written:
-.Bl -tag -width PROC_ASLR_FORCE_DISABLE
-.It Dv PROC_ASLR_FORCE_ENABLE
-.It Dv PROC_ASLR_FORCE_DISABLE
-.It Dv PROC_ASLR_NOFORCE
-.El
-.Pp
-If the currently executed image in the process itself has ASLR enabled,
-the
-.Dv PROC_ASLR_ACTIVE
-flag is or-ed with the value listed above.
-.It Dv PROC_PROTMAX_CTL
-Controls implicit application of PROT_MAX protection equal to the
-.Fa prot
-argument of the
-.Xr mmap 2
-syscall, in the target process.
-The
-.Fa data
-parameter must point to the integer variable holding one of the following
-values:
-.Bl -tag -width PROC_PROTMAX_FORCE_DISABLE
-.It Dv PROC_PROTMAX_FORCE_ENABLE
-Enables implicit PROT_MAX application,
-even if it is disabled system-wide by the sysctl
-.Va vm.imply_prot_max .
-The image flag might still prevent the enablement.
-.It Dv PROC_PROTMAX_FORCE_DISABLE
-Request that implicit application of PROT_MAX be disabled.
-Same notes as for
-.Dv PROC_PROTMAX_FORCE_ENABLE
-apply.
-.It Dv PROC_PROTMAX_NOFORCE
-Use the system-wide configured policy for PROT_MAX.
-.El
-.It Dv PROC_PROTMAX_STATUS
-Returns the current status of implicit PROT_MAX enablement for the
-target process.
-The
-.Fa data
-parameter must point to the integer variable, where one of the
-following values is written:
-.Bl -tag -width PROC_PROTMAX_FORCE_DISABLE
-.It Dv PROC_PROTMAX_FORCE_ENABLE
-.It Dv PROC_PROTMAX_FORCE_DISABLE
-.It Dv PROC_PROTMAX_NOFORCE
-.El
-.Pp
-If the currently executed image in the process itself has implicit PROT_MAX
-application enabled, the
-.Dv PROC_PROTMAX_ACTIVE
-flag is or-ed with the value listed above.
-.It Dv PROC_SPROTECT
-Set process protection state.
-This is used to mark a process as protected from being killed if the system
-exhausts the available memory and swap.
-The
-.Fa data
-parameter must point to an integer containing an operation and zero or more
-optional flags.
-The following operations are supported:
-.Bl -tag -width PPROT_CLEAR
-.It Dv PPROT_SET
-Mark the selected processes as protected.
-.It Dv PPROT_CLEAR
-Clear the protected state of selected processes.
-.El
-.Pp
-The following optional flags are supported:
-.Bl -tag -width PPROT_DESCEND
-.It Dv PPROT_DESCEND
-Apply the requested operation to all child processes of each selected process
-in addition to each selected process.
-.It Dv PPROT_INHERIT
-When used with
-.Dv PPROT_SET ,
-mark all future child processes of each selected process as protected.
-Future child processes will also mark all of their future child processes.
-.El
-.It Dv PROC_REAP_ACQUIRE
-Acquires the reaper status for the current process.
-Reaper status means that children orphaned by the reaper's descendants
-that were forked after the acquisition of reaper status are reparented to the
-reaper process.
-After system initialization,
-.Xr init 8
-is the default reaper.
-.It Dv PROC_REAP_RELEASE
-Release the reaper state for the current process.
-The reaper of the current process becomes the new reaper of the
-current process's descendants.
-.It Dv PROC_REAP_STATUS
-Provides information about the reaper of the specified process,
-or the process itself when it is a reaper.
-The
-.Fa data
-argument must point to a
-.Vt procctl_reaper_status
-structure which is filled in by the syscall on successful return.
-.Bd -literal
-struct procctl_reaper_status {
- u_int rs_flags;
- u_int rs_children;
- u_int rs_descendants;
- pid_t rs_reaper;
- pid_t rs_pid;
-};
-.Ed
-The
-.Fa rs_flags
-may have the following flags returned:
-.Bl -tag -width REAPER_STATUS_REALINIT
-.It Dv REAPER_STATUS_OWNED
-The specified process has acquired reaper status and has not
-released it.
-When the flag is returned, the specified process
-.Fa id ,
-pid, identifies the reaper, otherwise the
-.Fa rs_reaper
-field of the structure is set to the pid of the reaper
-for the specified process id.
-.It Dv REAPER_STATUS_REALINIT
-The specified process is the root of the reaper tree, i.e.,
-.Xr init 8 .
-.El
-.Pp
-The
-.Fa rs_children
-field returns the number of children of the reaper among the descendants.
-It is possible to have a child whose reaper is not the specified process,
-since the reaper for any existing children is not reset on the
-.Dv PROC_REAP_ACQUIRE
-operation.
-The
-.Fa rs_descendants
-field returns the total number of descendants of the reaper(s),
-not counting descendants of the reaper in the subtree.
-The
-.Fa rs_reaper
-field returns the reaper pid.
-The
-.Fa rs_pid
-returns the pid of one reaper child if there are any descendants.
-.It Dv PROC_REAP_GETPIDS
-Queries the list of descendants of the reaper of the specified process.
-The request takes a pointer to a
-.Vt procctl_reaper_pids
-structure in the
-.Fa data
-parameter.
-.Bd -literal
-struct procctl_reaper_pids {
- u_int rp_count;
- struct procctl_reaper_pidinfo *rp_pids;
-};
-.Ed
-When called, the
-.Fa rp_pids
-field must point to an array of
-.Vt procctl_reaper_pidinfo
-structures, to be filled in on return,
-and the
-.Fa rp_count
-field must specify the size of the array,
-into which no more than
-.Fa rp_count
-elements will be filled in by the kernel.
-.Pp
-The
-.Vt "struct procctl_reaper_pidinfo"
-structure provides some information about one of the reaper's descendants.
-Note that for a descendant that is not a child, it may be incorrectly
-identified because of a race in which the original child process exited
-and the exited process's pid was reused for an unrelated process.
-.Bd -literal
-struct procctl_reaper_pidinfo {
- pid_t pi_pid;
- pid_t pi_subtree;
- u_int pi_flags;
-};
-.Ed
-The
-.Fa pi_pid
-field is the process id of the descendant.
-The
-.Fa pi_subtree
-field provides the pid of the child of the reaper, which is the (grand-)parent
-of the process.
-The
-.Fa pi_flags
-field returns the following flags, further describing the descendant:
-.Bl -tag -width REAPER_PIDINFO_EXITING
-.It Dv REAPER_PIDINFO_VALID
-Set to indicate that the
-.Vt procctl_reaper_pidinfo
-structure was filled in by the kernel.
-Zero-filling the
-.Fa rp_pids
-array and testing the
-.Dv REAPER_PIDINFO_VALID
-flag allows the caller to detect the end
-of the returned array.
-.It Dv REAPER_PIDINFO_CHILD
-The
-.Fa pi_pid
-field identifies the direct child of the reaper.
-.It Dv REAPER_PIDINFO_REAPER
-The reported process is itself a reaper.
-The descendants of the subordinate reaper are not reported.
-.It Dv REAPER_PIDINFO_ZOMBIE
-The reported process is in the zombie state, ready to be reaped.
-.It Dv REAPER_PIDINFO_STOPPED
-The reported process is stopped by a SIGSTOP/SIGTSTP signal.
-.It Dv REAPER_PIDINFO_EXITING
-The reported process is in the process of exiting (but not yet a zombie).
-.El
-.It Dv PROC_REAP_KILL
-Request to deliver a signal to some subset of the descendants of the reaper.
-The
-.Fa data
-parameter must point to a
-.Vt procctl_reaper_kill
-structure, which is used both for parameters and status return.
-.Bd -literal
-struct procctl_reaper_kill {
- int rk_sig;
- u_int rk_flags;
- pid_t rk_subtree;
- u_int rk_killed;
- pid_t rk_fpid;
-};
-.Ed
-The
-.Fa rk_sig
-field specifies the signal to be delivered.
-Zero is not a valid signal number, unlike for
-.Xr kill 2 .
-The
-.Fa rk_flags
-field further directs the operation.
-It is or-ed from the following flags:
-.Bl -tag -width REAPER_KILL_CHILDREN
-.It Dv REAPER_KILL_CHILDREN
-Deliver the specified signal only to direct children of the reaper.
-.It Dv REAPER_KILL_SUBTREE
-Deliver the specified signal only to descendants that were forked by
-the direct child with pid specified in the
-.Fa rk_subtree
-field.
-.El
-If neither the
-.Dv REAPER_KILL_CHILDREN
-nor the
-.Dv REAPER_KILL_SUBTREE
-flags are specified, all current descendants of the reaper are signalled.
-.Pp
-If a signal was delivered to any process, the return value from the request
-is zero.
-In this case, the
-.Fa rk_killed
-field identifies the number of processes signalled.
-The
-.Fa rk_fpid
-field is set to the pid of the first process for which signal
-delivery failed, e.g., due to permission problems.
-If no such process exists, the
-.Fa rk_fpid
-field is set to -1.
-.It Dv PROC_TRACE_CTL
-Enable or disable tracing of the specified process(es), according to the
-value of the integer argument.
-Tracing includes attachment to the process using the
-.Xr ptrace 2
-and
-.Xr ktrace 2 ,
-debugging sysctls,
-.Xr hwpmc 4 ,
-.Xr dtrace 1 ,
-and core dumping.
-Possible values for the
-.Fa data
-argument are:
-.Bl -tag -width PROC_TRACE_CTL_DISABLE_EXEC
-.It Dv PROC_TRACE_CTL_ENABLE
-Enable tracing, after it was disabled by
-.Dv PROC_TRACE_CTL_DISABLE .
-Only allowed for self.
-.It Dv PROC_TRACE_CTL_DISABLE
-Disable tracing for the specified process.
-Tracing is re-enabled when the process changes the executing
-program with the
-.Xr execve 2
-syscall.
-A child inherits the trace settings from the parent on
-.Xr fork 2 .
-.It Dv PROC_TRACE_CTL_DISABLE_EXEC
-Same as
-.Dv PROC_TRACE_CTL_DISABLE ,
-but the setting persists for the process even after
-.Xr execve 2 .
-.El
-.It Dv PROC_TRACE_STATUS
-Returns the current tracing status for the specified process in
-the integer variable pointed to by
-.Fa data .
-If tracing is disabled,
-.Fa data
-is set to -1.
-If tracing is enabled, but no debugger is attached by the
-.Xr ptrace 2
-syscall,
-.Fa data
-is set to 0.
-If a debugger is attached,
-.Fa data
-is set to the pid of the debugger process.
-.It Dv PROC_TRAPCAP_CTL
-Controls the capability mode sandbox actions for the specified
-sandboxed processes,
-on a return from any syscall which gives either a
-.Er ENOTCAPABLE
-or
-.Er ECAPMODE
-error.
-If the control is enabled, such errors from the syscalls cause
-delivery of the synchronous
-.Dv SIGTRAP
-signal to the thread immediately before returning from the syscalls.
-.Pp
-Possible values for the
-.Fa data
-argument are:
-.Bl -tag -width PROC_TRAPCAP_CTL_DISABLE
-.It Dv PROC_TRAPCAP_CTL_ENABLE
-Enable the
-.Dv SIGTRAP
-signal delivery on capability mode access violations.
-The enabled mode is inherited by the children of the process,
-and is kept after
-.Xr fexecve 2
-calls.
-.It Dv PROC_TRAPCAP_CTL_DISABLE
-Disable the signal delivery on capability mode access violations.
-Note that the global sysctl
-.Dv kern.trap_enotcap
-might still cause the signal to be delivered.
-See
-.Xr capsicum 4 .
-.El
-.Pp
-On signal delivery, the
-.Va si_errno
-member of the
-.Fa siginfo
-signal handler parameter is set to the syscall error value,
-and the
-.Va si_code
-member is set to
-.Dv TRAP_CAP .
-The system call number is stored in the
-.Va si_syscall
-field of the
-.Fa siginfo
-signal handler parameter.
-The other system call parameters can be read from the
-.Fa ucontext_t
-but the system call number is typically stored in the register
-that also contains the return value and so is unavailable in the
-signal handler.
-.Pp
-See
-.Xr capsicum 4
-for more information about the capability mode.
-.It Dv PROC_TRAPCAP_STATUS
-Return the current status of signalling capability mode access
-violations for the specified process.
-The integer value pointed to by the
-.Fa data
-argument is set to the
-.Dv PROC_TRAPCAP_CTL_ENABLE
-value if the process control enables signal delivery, and to
-.Dv PROC_TRAPCAP_CTL_DISABLE
-otherwise.
-.Pp
-See the note about sysctl
-.Dv kern.trap_enotcap
-above, which gives independent global control of signal delivery.
-.It Dv PROC_PDEATHSIG_CTL
-Request the delivery of a signal when the parent of the calling
-process exits.
-.Fa idtype
-must be
-.Dv P_PID
-and
-.Fa id
-must be the either caller's pid or zero, with no difference in effect.
-The value is cleared for child processes
-and when executing set-user-ID or set-group-ID binaries.
-.Fa data
-must point to a value of type
-.Vt int
-indicating the signal
-that should be delivered to the caller.
-Use zero to cancel a previously requested signal delivery.
-.It Dv PROC_PDEATHSIG_STATUS
-Query the current signal number that will be delivered when the parent
-of the calling process exits.
-.Fa idtype
-must be
-.Dv P_PID
-and
-.Fa id
-must be the either caller's pid or zero, with no difference in effect.
-.Fa data
-must point to a memory location that can hold a value of type
-.Vt int .
-If signal delivery has not been requested, it will contain zero
-on return.
-.It Dv PROC_STACKGAP_CTL
-Controls the stack gaps in the specified process.
-A stack gap is the part of the growth area for a
-.Dv MAP_STACK
-mapped region that is reserved and never filled by memory.
-Instead, the process is guaranteed to receive a
-.Dv SIGSEGV
-signal on accessing pages in the gap.
-Gaps protect against stack overflow corrupting memory adjacent
-to the stack.
-.Pp
-The
-.Fa data
-argument must point to an integer variable containing flags.
-The following flags are allowed:
-.Bl -tag -width PROC_STACKGAP_DISABLE_EXEC
-.It Dv PROC_STACKGAP_ENABLE
-This flag is only accepted for consistency with
-.Dv PROC_STACKGAP_STATUS .
-If stack gaps are enabled, the flag is ignored.
-If disabled, the flag causes an
-.Ev EINVAL
-error to be returned.
-After gaps are disabled in a process, they can only be re-enabled when an
-.Xr execve 2
-is performed.
-.It Dv PROC_STACKGAP_DISABLE
-Disable stack gaps for the process.
-For existing stacks, the gap is no longer a reserved part of the growth
-area and can be filled by memory on access.
-.It Dv PROC_STACKGAP_ENABLE_EXEC
-Enable stack gaps for programs started after an
-.Xr execve 2
-by the specified process.
-.It Dv PROC_STACKGAP_DISABLE_EXEC
-Inherit disabled stack gaps state after
-.Xr execve 2 .
-In other words, if the currently executing program has stack gaps disabled,
-they are kept disabled on exec.
-If gaps were enabled, they are kept enabled after exec.
-.El
-.Pp
-The stack gap state is inherited from the parent on
-.Xr fork 2 .
-.It Dv PROC_STACKGAP_STATUS
-Returns the current stack gap state for the specified process.
-.Fa data
-must point to an integer variable, which is used to return a bitmask
-consisting of the following flags:
-.Bl -tag -width PROC_STACKGAP_DISABLE_EXEC
-.It Dv PROC_STACKGAP_ENABLE
-Stack gaps are enabled.
-.It Dv PROC_STACKGAP_DISABLE
-Stack gaps are disabled.
-.It Dv PROC_STACKGAP_ENABLE_EXEC
-Stack gaps are enabled in the process after
-.Xr execve 2 .
-.It Dv PROC_STACKGAP_DISABLE_EXEC
-Stack gaps are disabled in the process after
-.Xr execve 2 .
-.El
-.It Dv PROC_NO_NEW_PRIVS_CTL
-Allows one to ignore the SUID and SGID bits on the program
-images activated by
-.Xr execve 2
-in the specified process and its future descendants.
-The
-.Fa data
-parameter must point to the integer variable holding the following
-value:
-.Bl -tag -width PROC_NO_NEW_PRIVS_ENABLE
-.It Dv PROC_NO_NEW_PRIVS_ENABLE
-Request SUID and SGID bits to be ignored.
-.El
-.Pp
-It is not possible to disable it once it has been enabled.
-.It Dv PROC_NO_NEW_PRIVS_STATUS
-Returns the current status of SUID/SGID enablement for the target process.
-The
-.Fa data
-parameter must point to the integer variable, where one of the
-following values is written:
-.Bl -tag -width PROC_NO_NEW_PRIVS_DISABLE
-.It Dv PROC_NO_NEW_PRIVS_ENABLE
-.It Dv PROC_NO_NEW_PRIVS_DISABLE
-.El
-.It Dv PROC_WXMAP_CTL
-Controls the 'write exclusive against execution' permissions for the
-mappings in the process address space.
-It overrides the global settings established by the
-.Dv kern.elf{32/64}.allow_wx
-sysctl,
-and the corresponding bit in the ELF control note, see
-.Xr elfctl 1 .
-.Pp
-The
-.Fa data
-parameter must point to the integer variable holding one of the
-following values:
-.Bl -tag -width PROC_WX_MAPPINGS_DISALLOW_EXEC
-.It Dv PROC_WX_MAPPINGS_PERMIT
-Enable creation of mappings that have both write and execute
-protection attributes, in the specified process' address space.
-.It Dv PROC_WX_MAPPINGS_DISALLOW_EXEC
-In the new address space created by
-.Xr execve 2 ,
-disallow creation of mappings that have both write and execute
-permissions.
-.El
-.Pp
-Once creation of writeable and executable mappings is allowed,
-it is impossible (and pointless) to disallow it.
-The only way to ensure the absence of such mappings after they
-were enabled in a given process, is to set the
-.Dv PROC_WX_MAPPINGS_DISALLOW_EXEC
-flag and
-.Xr execve 2
-an image.
-.It Dv PROC_WXMAP_STATUS
-Returns the current status of the 'write exclusive against execution'
-enforcement for the specified process.
-The
-.Dv data
-parameter must point to the integer variable, where one of the
-following values is written:
-.Bl -tag -width PROC_WX_MAPPINGS_DISALLOW_EXEC
-.It Dv PROC_WX_MAPPINGS_PERMIT
-Creation of simultaneously writable and executable mapping is permitted,
-otherwise the process cannot create such mappings.
-.It Dv PROC_WX_MAPPINGS_DISALLOW_EXEC
-After
-.Xr execve 2 ,
-the new address space should disallow creation of simultaneously
-writable and executable mappings.
-.El
-.Pp
-Additionally, if the address space of the process disallows
-creation of simultaneously writable and executable mappings and
-it is guaranteed that no such mapping was created since address space
-creation, the
-.Dv PROC_WXORX_ENFORCE
-flag is set in the returned value.
-.El
-.Sh x86 MACHINE-SPECIFIC REQUESTS
-.Bl -tag -width PROC_KPTI_STATUS
-.It Dv PROC_KPTI_CTL
-AMD64 only.
-Controls the Kernel Page Table Isolation (KPTI) option for the children
-of the specified process.
-For the command to work, the
-.Va vm.pmap.kpti
-tunable must be enabled on boot.
-It is not possible to change the KPTI setting for a running process,
-except at the
-.Xr execve 2 ,
-where the address space is reinitialized.
-.Pp
-The
-.Fa data
-parameter must point to an integer variable containing one of the
-following commands:
-.Bl -tag -width PROC_KPTI_CTL_DISABLE_ON_EXEC
-.It Dv PROC_KPTI_CTL_ENABLE_ON_EXEC
-Enable KPTI after
-.Xr execve 2 .
-.It Dv PROC_KPTI_CTL_DISABLE_ON_EXEC
-Disable KPTI after
-.Xr execve 2 .
-Only root or a process having the
-.Va PRIV_IO
-privilege might use this option.
-.El
-.It Dv PROC_KPTI_STATUS
-Returns the current KPTI status for the specified process.
-.Fa data
-must point to the integer variable, which returns the
-following statuses:
-.Bl -tag -width PROC_KPTI_CTL_DISABLE_ON_EXEC
-.It Dv PROC_KPTI_CTL_ENABLE_ON_EXEC
-.It Dv PROC_KPTI_CTL_DISABLE_ON_EXEC
-.El
-.Pp
-The status is or-ed with the
-.Va PROC_KPTI_STATUS_ACTIVE
-in case KPTI is active for the current address space of the process.
-.Sh NOTES
-Disabling tracing on a process should not be considered a security
-feature, as it is bypassable both by the kernel and privileged processes,
-and via other system mechanisms.
-As such, it should not be utilized to reliably protect cryptographic
-keying material or other confidential data.
-.Pp
-Note that processes can trivially bypass the 'no simultaneously
-writable and executable mappings' policy by first marking some mapping
-as writeable and write code to it, then removing write and adding
-execute permission.
-This may be legitimately required by some programs, such as JIT compilers.
-.Sh RETURN VALUES
-If an error occurs, a value of -1 is returned and
-.Va errno
-is set to indicate the error.
-.Sh ERRORS
-The
-.Fn procctl
-system call
-will fail if:
-.Bl -tag -width Er
-.It Bq Er EFAULT
-The
-.Fa data
-parameter points outside the process's allocated address space.
-.It Bq Er EINVAL
-The
-.Fa cmd
-argument specifies an unsupported command.
-.Pp
-The
-.Fa idtype
-argument specifies an unsupported identifier type.
-.It Bq Er EPERM
-The calling process does not have permission to perform the requested
-operation on any of the selected processes.
-.It Bq Er ESRCH
-No processes matched the requested
-.Fa idtype
-and
-.Fa id .
-.It Bq Er EINVAL
-An invalid operation or flag was passed in
-.Fa data
-for a
-.Dv PROC_SPROTECT
-command.
-.It Bq Er EPERM
-The
-.Fa idtype
-argument is not equal to
-.Dv P_PID ,
-or
-.Fa id
-is not equal to the pid of the calling process, for
-.Dv PROC_REAP_ACQUIRE
-or
-.Dv PROC_REAP_RELEASE
-requests.
-.It Bq Er EINVAL
-Invalid or undefined flags were passed to a
-.Dv PROC_REAP_KILL
-request.
-.It Bq Er EINVAL
-An invalid or zero signal number was requested for a
-.Dv PROC_REAP_KILL
-request.
-.It Bq Er EINVAL
-The
-.Dv PROC_REAP_RELEASE
-request was issued by the
-.Xr init 8
-process.
-.It Bq Er EBUSY
-The
-.Dv PROC_REAP_ACQUIRE
-request was issued by a process that had already acquired reaper status
-and has not yet released it.
-.It Bq Er EBUSY
-The
-.Dv PROC_TRACE_CTL
-request was issued for a process already being traced.
-.It Bq Er EPERM
-The
-.Dv PROC_TRACE_CTL
-request to re-enable tracing of the process
-.Po Dv PROC_TRACE_CTL_ENABLE Pc ,
-or to disable persistence of
-.Dv PROC_TRACE_CTL_DISABLE
-on
-.Xr execve 2
-was issued for a non-current process.
-.It Bq Er EINVAL
-The value of the integer
-.Fa data
-parameter for the
-.Dv PROC_TRACE_CTL
-or
-.Dv PROC_TRAPCAP_CTL
-request is invalid.
-.It Bq Er EINVAL
-The
-.Dv PROC_PDEATHSIG_CTL
-or
-.Dv PROC_PDEATHSIG_STATUS
-request referenced an unsupported
-.Fa id ,
-.Fa idtype
-or invalid signal number.
-.El
-.Sh SEE ALSO
-.Xr dtrace 1 ,
-.Xr proccontrol 1 ,
-.Xr protect 1 ,
-.Xr cap_enter 2 ,
-.Xr kill 2 ,
-.Xr ktrace 2 ,
-.Xr mmap 2 ,
-.Xr mprotect 2 ,
-.Xr ptrace 2 ,
-.Xr wait 2 ,
-.Xr capsicum 4 ,
-.Xr hwpmc 4 ,
-.Xr init 8
-.Sh HISTORY
-The
-.Fn procctl
-function appeared in
-.Fx 10.0 .
-.Pp
-The reaper facility is based on a similar feature of Linux and
-DragonflyBSD, and first appeared in
-.Fx 10.2 .
-.Pp
-The
-.Dv PROC_PDEATHSIG_CTL
-facility is based on the prctl(PR_SET_PDEATHSIG, ...) feature of Linux,
-and first appeared in
-.Fx 11.2 .
-.Pp
-The ASLR support was added to system for the checklists compliance in
-.Fx 13.0 .