p_candebug9
Determine debuggability of a process
Usage
#include <sys/proc.h>
int
p_candebug(struct thread *td, struct proc *p);
Overview
This function can be used to determine if a given process p is debuggable by the thread td.
Sysctl variables
The following sysctl(8) variables directly influence the behaviour of p_candebug():
- kern.securelevel
-
Debugging of the init process is not allowed if this variable is 1 or greater.
- security.bsd.unprivileged_proc_debug
-
Must be set to a non-zero value to allow unprivileged processes access to the kernel's debug facilities.
Return values
The p_candebug() function returns 0 if the process denoted by p is debuggable by thread td, or a non-zero error return value otherwise.
Errors
- [EACCESS]
-
The MAC subsystem denied debuggability.
- [EAGAIN]
-
Process p is in the process of being
exec(Ns, 'ed.) - [EPERM]
-
Thread td lacks super-user credentials and process p is executing a set-user-ID or set-group-ID executable.
- [EPERM]
-
Thread td lacks super-user credentials and process p's group set is not a subset of td's effective group set.
- [EPERM]
-
Thread td lacks super-user credentials and process p's user IDs do not match thread td's effective user ID.
- [EPERM]
-
Process p denotes the initial process
initproc() and the sysctl(8) variable kern.securelevel is greater than zero. - [ESRCH]
-
Process p is not visible to thread td as determined by cr_seeotheruids(9) or cr_seeothergids(9).
- [ESRCH]
-
Thread td has been jailed and process p does not belong to the same jail as td.
- [ESRCH]
-
The MAC subsystem denied debuggability.