xref: /f-stack/freebsd/sys/procctl.h (revision 22ce4aff)
1a9643ea8Slogwang /*-
2*22ce4affSfengbojiang  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3*22ce4affSfengbojiang  *
4a9643ea8Slogwang  * Copyright (c) 2013 Hudson River Trading LLC
5*22ce4affSfengbojiang  * Copyright (c) 2014, 2016 The FreeBSD Foundation
6a9643ea8Slogwang  * Written by: John H. Baldwin <[email protected]>
7a9643ea8Slogwang  * All rights reserved.
8a9643ea8Slogwang  *
9*22ce4affSfengbojiang  * Portions of this software were developed by Konstantin Belousov
10*22ce4affSfengbojiang  * under sponsorship from the FreeBSD Foundation.
11*22ce4affSfengbojiang  *
12a9643ea8Slogwang  * Redistribution and use in source and binary forms, with or without
13a9643ea8Slogwang  * modification, are permitted provided that the following conditions
14a9643ea8Slogwang  * are met:
15a9643ea8Slogwang  * 1. Redistributions of source code must retain the above copyright
16a9643ea8Slogwang  *    notice, this list of conditions and the following disclaimer.
17a9643ea8Slogwang  * 2. Redistributions in binary form must reproduce the above copyright
18a9643ea8Slogwang  *    notice, this list of conditions and the following disclaimer in the
19a9643ea8Slogwang  *    documentation and/or other materials provided with the distribution.
20a9643ea8Slogwang  *
21a9643ea8Slogwang  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
22a9643ea8Slogwang  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23a9643ea8Slogwang  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24a9643ea8Slogwang  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
25a9643ea8Slogwang  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26a9643ea8Slogwang  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27a9643ea8Slogwang  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28a9643ea8Slogwang  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29a9643ea8Slogwang  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30a9643ea8Slogwang  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31a9643ea8Slogwang  * SUCH DAMAGE.
32a9643ea8Slogwang  *
33a9643ea8Slogwang  * $FreeBSD$
34a9643ea8Slogwang  */
35a9643ea8Slogwang 
36a9643ea8Slogwang #ifndef	_SYS_PROCCTL_H_
37a9643ea8Slogwang #define	_SYS_PROCCTL_H_
38a9643ea8Slogwang 
39a9643ea8Slogwang #ifndef _KERNEL
40a9643ea8Slogwang #include <sys/types.h>
41a9643ea8Slogwang #include <sys/wait.h>
42a9643ea8Slogwang #endif
43a9643ea8Slogwang 
44*22ce4affSfengbojiang /* MD PROCCTL verbs start at 0x10000000 */
45*22ce4affSfengbojiang #define	PROC_PROCCTL_MD_MIN	0x10000000
46*22ce4affSfengbojiang #include <machine/procctl.h>
47*22ce4affSfengbojiang 
48a9643ea8Slogwang #define	PROC_SPROTECT		1	/* set protected state */
49a9643ea8Slogwang #define	PROC_REAP_ACQUIRE	2	/* reaping enable */
50a9643ea8Slogwang #define	PROC_REAP_RELEASE	3	/* reaping disable */
51a9643ea8Slogwang #define	PROC_REAP_STATUS	4	/* reaping status */
52a9643ea8Slogwang #define	PROC_REAP_GETPIDS	5	/* get descendants */
53a9643ea8Slogwang #define	PROC_REAP_KILL		6	/* kill descendants */
54a9643ea8Slogwang #define	PROC_TRACE_CTL		7	/* en/dis ptrace and coredumps */
55a9643ea8Slogwang #define	PROC_TRACE_STATUS	8	/* query tracing status */
56*22ce4affSfengbojiang #define	PROC_TRAPCAP_CTL	9	/* trap capability errors */
57*22ce4affSfengbojiang #define	PROC_TRAPCAP_STATUS	10	/* query trap capability status */
58*22ce4affSfengbojiang #define	PROC_PDEATHSIG_CTL	11	/* set parent death signal */
59*22ce4affSfengbojiang #define	PROC_PDEATHSIG_STATUS	12	/* get parent death signal */
60*22ce4affSfengbojiang #define	PROC_ASLR_CTL		13	/* en/dis ASLR */
61*22ce4affSfengbojiang #define	PROC_ASLR_STATUS	14	/* query ASLR status */
62*22ce4affSfengbojiang #define	PROC_PROTMAX_CTL	15	/* en/dis implicit PROT_MAX */
63*22ce4affSfengbojiang #define	PROC_PROTMAX_STATUS	16	/* query implicit PROT_MAX status */
64*22ce4affSfengbojiang #define	PROC_STACKGAP_CTL	17	/* en/dis stack gap on MAP_STACK */
65*22ce4affSfengbojiang #define	PROC_STACKGAP_STATUS	18	/* query stack gap */
66a9643ea8Slogwang 
67a9643ea8Slogwang /* Operations for PROC_SPROTECT (passed in integer arg). */
68a9643ea8Slogwang #define	PPROT_OP(x)	((x) & 0xf)
69a9643ea8Slogwang #define	PPROT_SET	1
70a9643ea8Slogwang #define	PPROT_CLEAR	2
71a9643ea8Slogwang 
72a9643ea8Slogwang /* Flags for PROC_SPROTECT (ORed in with operation). */
73a9643ea8Slogwang #define	PPROT_FLAGS(x)	((x) & ~0xf)
74a9643ea8Slogwang #define	PPROT_DESCEND	0x10
75a9643ea8Slogwang #define	PPROT_INHERIT	0x20
76a9643ea8Slogwang 
77a9643ea8Slogwang /* Result of PREAP_STATUS (returned by value). */
78a9643ea8Slogwang struct procctl_reaper_status {
79a9643ea8Slogwang 	u_int	rs_flags;
80a9643ea8Slogwang 	u_int	rs_children;
81a9643ea8Slogwang 	u_int	rs_descendants;
82a9643ea8Slogwang 	pid_t	rs_reaper;
83a9643ea8Slogwang 	pid_t	rs_pid;
84a9643ea8Slogwang 	u_int	rs_pad0[15];
85a9643ea8Slogwang };
86a9643ea8Slogwang 
87a9643ea8Slogwang /* struct procctl_reaper_status rs_flags */
88a9643ea8Slogwang #define	REAPER_STATUS_OWNED	0x00000001
89a9643ea8Slogwang #define	REAPER_STATUS_REALINIT	0x00000002
90a9643ea8Slogwang 
91a9643ea8Slogwang struct procctl_reaper_pidinfo {
92a9643ea8Slogwang 	pid_t	pi_pid;
93a9643ea8Slogwang 	pid_t	pi_subtree;
94a9643ea8Slogwang 	u_int	pi_flags;
95a9643ea8Slogwang 	u_int	pi_pad0[15];
96a9643ea8Slogwang };
97a9643ea8Slogwang 
98a9643ea8Slogwang #define	REAPER_PIDINFO_VALID	0x00000001
99a9643ea8Slogwang #define	REAPER_PIDINFO_CHILD	0x00000002
100*22ce4affSfengbojiang #define	REAPER_PIDINFO_REAPER	0x00000004
101a9643ea8Slogwang 
102a9643ea8Slogwang struct procctl_reaper_pids {
103a9643ea8Slogwang 	u_int	rp_count;
104a9643ea8Slogwang 	u_int	rp_pad0[15];
105a9643ea8Slogwang 	struct procctl_reaper_pidinfo *rp_pids;
106a9643ea8Slogwang };
107a9643ea8Slogwang 
108a9643ea8Slogwang struct procctl_reaper_kill {
109a9643ea8Slogwang 	int	rk_sig;		/* in  - signal to send */
110a9643ea8Slogwang 	u_int	rk_flags;	/* in  - REAPER_KILL flags */
111a9643ea8Slogwang 	pid_t	rk_subtree;	/* in  - subtree, if REAPER_KILL_SUBTREE */
112a9643ea8Slogwang 	u_int	rk_killed;	/* out - count of processes successfully
113a9643ea8Slogwang 				   killed */
114a9643ea8Slogwang 	pid_t	rk_fpid;	/* out - first failed pid for which error
115a9643ea8Slogwang 				   is returned */
116a9643ea8Slogwang 	u_int	rk_pad0[15];
117a9643ea8Slogwang };
118a9643ea8Slogwang 
119a9643ea8Slogwang #define	REAPER_KILL_CHILDREN	0x00000001
120a9643ea8Slogwang #define	REAPER_KILL_SUBTREE	0x00000002
121a9643ea8Slogwang 
122a9643ea8Slogwang #define	PROC_TRACE_CTL_ENABLE		1
123a9643ea8Slogwang #define	PROC_TRACE_CTL_DISABLE		2
124a9643ea8Slogwang #define	PROC_TRACE_CTL_DISABLE_EXEC	3
125a9643ea8Slogwang 
126*22ce4affSfengbojiang #define	PROC_TRAPCAP_CTL_ENABLE		1
127*22ce4affSfengbojiang #define	PROC_TRAPCAP_CTL_DISABLE	2
128*22ce4affSfengbojiang 
129*22ce4affSfengbojiang #define	PROC_ASLR_FORCE_ENABLE		1
130*22ce4affSfengbojiang #define	PROC_ASLR_FORCE_DISABLE		2
131*22ce4affSfengbojiang #define	PROC_ASLR_NOFORCE		3
132*22ce4affSfengbojiang #define	PROC_ASLR_ACTIVE		0x80000000
133*22ce4affSfengbojiang 
134*22ce4affSfengbojiang #define	PROC_PROTMAX_FORCE_ENABLE	1
135*22ce4affSfengbojiang #define	PROC_PROTMAX_FORCE_DISABLE	2
136*22ce4affSfengbojiang #define	PROC_PROTMAX_NOFORCE		3
137*22ce4affSfengbojiang #define	PROC_PROTMAX_ACTIVE		0x80000000
138*22ce4affSfengbojiang 
139*22ce4affSfengbojiang #define	PROC_STACKGAP_ENABLE		0x0001
140*22ce4affSfengbojiang #define	PROC_STACKGAP_DISABLE		0x0002
141*22ce4affSfengbojiang #define	PROC_STACKGAP_ENABLE_EXEC	0x0004
142*22ce4affSfengbojiang #define	PROC_STACKGAP_DISABLE_EXEC	0x0008
143*22ce4affSfengbojiang 
144a9643ea8Slogwang #ifndef _KERNEL
145a9643ea8Slogwang __BEGIN_DECLS
146a9643ea8Slogwang int	procctl(idtype_t, id_t, int, void *);
147a9643ea8Slogwang __END_DECLS
148a9643ea8Slogwang 
149a9643ea8Slogwang #endif
150a9643ea8Slogwang 
151a9643ea8Slogwang #endif /* !_SYS_PROCCTL_H_ */
152