aboutsummaryrefslogtreecommitdiff
path: root/sys/linux/prctl.txt
blob: 449464d121b2c8c67e098fd9a3c03b6fc5e49869 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# Copyright 2018 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

include <linux/errno.h>
include <linux/sched/coredump.h>
include <uapi/linux/prctl.h>
include <uapi/linux/seccomp.h>
include <uapi/linux/capability.h>
include <uapi/linux/securebits.h>
include <asm/prctl.h>

prctl$PR_SET_PDEATHSIG(option const[PR_SET_PDEATHSIG], arg signalno)
prctl$PR_GET_PDEATHSIG(option const[PR_GET_PDEATHSIG], arg ptr[out, int32])

prctl$PR_GET_DUMPABLE(option const[PR_GET_DUMPABLE])
prctl$PR_SET_DUMPABLE(option const[PR_SET_DUMPABLE], arg flags[prctl_dump_mode])

prctl_dump_mode = SUID_DUMP_USER, SUID_DUMP_ROOT

prctl$PR_GET_UNALIGN(option const[PR_GET_UNALIGN], arg ptr[out, int32])
prctl$PR_SET_UNALIGN(option const[PR_SET_UNALIGN], arg flags[prctl_align_mode])

prctl_align_mode = PR_UNALIGN_NOPRINT, PR_UNALIGN_SIGBUS

prctl$PR_GET_KEEPCAPS(option const[PR_GET_KEEPCAPS])
prctl$PR_SET_KEEPCAPS(option const[PR_SET_KEEPCAPS], arg boolptr)

prctl$PR_GET_FPEMU(option const[PR_GET_FPEMU], arg ptr[out, int32])
prctl$PR_SET_FPEMU(option const[PR_SET_FPEMU], arg flags[prctl_fpemu_mode])

prctl_fpemu_mode = PR_FPEMU_NOPRINT, PR_FPEMU_SIGFPE

prctl$PR_GET_FPEXC(option const[PR_GET_FPEXC], arg ptr[out, int32])
prctl$PR_SET_FPEXC(option const[PR_SET_FPEXC], arg flags[prctl_fpexc_mode])

prctl_fpexc_mode = PR_FP_EXC_SW_ENABLE, PR_FP_EXC_DIV, PR_FP_EXC_OVF, PR_FP_EXC_UND, PR_FP_EXC_RES, PR_FP_EXC_INV, PR_FP_EXC_DISABLED, PR_FP_EXC_NONRECOV, PR_FP_EXC_ASYNC, PR_FP_EXC_PRECISE

# These are not implemented.
_ = PR_GET_TIMING, PR_SET_TIMING

prctl$PR_SET_NAME(option const[PR_SET_NAME], name ptr[in, string])
prctl$PR_GET_NAME(option const[PR_GET_NAME], name ptr[out, array[int8]])

prctl$PR_GET_ENDIAN(option const[PR_GET_ENDIAN], arg ptr[out, int32])
prctl$PR_SET_ENDIAN(option const[PR_SET_ENDIAN], arg flags[prctl_endian_mode])

prctl_endian_mode = PR_ENDIAN_BIG, PR_ENDIAN_LITTLE, PR_ENDIAN_PPC_LITTLE

prctl$PR_GET_SECCOMP(option const[PR_GET_SECCOMP])
prctl$PR_SET_SECCOMP(option const[PR_SET_SECCOMP], mode flags[prctl_seccomp_mode], prog ptr[in, sock_fprog])

prctl_seccomp_mode = SECCOMP_MODE_DISABLED, SECCOMP_MODE_STRICT, SECCOMP_MODE_FILTER

prctl$PR_CAPBSET_READ(option const[PR_CAPBSET_READ], arg int32[0:CAP_LAST_CAP])
prctl$PR_CAPBSET_DROP(option const[PR_CAPBSET_DROP], arg int32[0:CAP_LAST_CAP])

prctl$PR_GET_TSC(option const[PR_GET_TSC], arg ptr[out, int32])
prctl$PR_SET_TSC(option const[PR_SET_TSC], arg flags[prctl_tsc_mode])

prctl_tsc_mode = PR_TSC_ENABLE, PR_TSC_SIGSEGV

prctl$PR_GET_SECUREBITS(option const[PR_GET_SECUREBITS])
prctl$PR_SET_SECUREBITS(option const[PR_SET_SECUREBITS], arg flags[prctl_securebits])

prctl_securebits = SECBIT_NOROOT, SECBIT_NOROOT_LOCKED, SECBIT_NO_SETUID_FIXUP, SECBIT_NO_SETUID_FIXUP_LOCKED, SECBIT_KEEP_CAPS, SECBIT_KEEP_CAPS_LOCKED

prctl$PR_SET_TIMERSLACK(option const[PR_SET_TIMERSLACK], arg intptr)
prctl$PR_GET_TIMERSLACK(option const[PR_GET_TIMERSLACK])

prctl$PR_TASK_PERF_EVENTS_DISABLE(option const[PR_TASK_PERF_EVENTS_DISABLE])
prctl$PR_TASK_PERF_EVENTS_ENABLE(option const[PR_TASK_PERF_EVENTS_ENABLE])

prctl$PR_MCE_KILL(option const[PR_MCE_KILL], arg2 flags[prctl_mce_kill_mode], arg3 flags[prctl_mce_kill_submode])
prctl$PR_MCE_KILL_GET(option const[PR_MCE_KILL_GET])

prctl_mce_kill_mode = PR_MCE_KILL_CLEAR, PR_MCE_KILL_SET
prctl_mce_kill_submode = PR_MCE_KILL_LATE, PR_MCE_KILL_EARLY, PR_MCE_KILL_DEFAULT

prctl$PR_SET_MM(option const[PR_SET_MM], opt flags[prctl_mm_option], arg vma)
prctl$PR_SET_MM_EXE_FILE(option const[PR_SET_MM], opt const[PR_SET_MM_EXE_FILE], arg fd)
prctl$PR_SET_MM_AUXV(option const[PR_SET_MM], opt const[PR_SET_MM_AUXV], arg ptr[in, array[int8]], len bytesize[arg])
prctl$PR_SET_MM_MAP(option const[PR_SET_MM], opt const[PR_SET_MM_MAP], arg ptr[in, prctl_mm_map], len bytesize[arg])
prctl$PR_SET_MM_MAP_SIZE(option const[PR_SET_MM], opt const[PR_SET_MM_MAP_SIZE], arg ptr[out, int32])

prctl_mm_option = PR_SET_MM_START_CODE, PR_SET_MM_END_CODE, PR_SET_MM_START_DATA, PR_SET_MM_END_DATA, PR_SET_MM_START_STACK, PR_SET_MM_START_BRK, PR_SET_MM_BRK, PR_SET_MM_ARG_START, PR_SET_MM_ARG_END, PR_SET_MM_ENV_START, PR_SET_MM_ENV_END

prctl_mm_map {
	start_code	vma64
	end_code	vma64
	start_data	vma64
	end_data	vma64
	start_brk	vma64
	brk		vma64
	start_stack	vma64
	arg_start	vma64
	arg_end		vma64
	env_start	vma64
	env_end		vma64
	auxv		ptr[in, array[int8]]
	auxv_size	bytesize[auxv, int32]
	exe_fd		fd
}

prctl$PR_SET_PTRACER(option const[PR_SET_PTRACER], pid pid)

prctl$PR_SET_CHILD_SUBREAPER(option const[PR_SET_CHILD_SUBREAPER], arg boolptr)
prctl$PR_GET_CHILD_SUBREAPER(option const[PR_GET_CHILD_SUBREAPER])

prctl$PR_SET_NO_NEW_PRIVS(option const[PR_SET_NO_NEW_PRIVS], arg const[1])
prctl$PR_GET_NO_NEW_PRIVS(option const[PR_GET_NO_NEW_PRIVS])

prctl$PR_GET_TID_ADDRESS(option const[PR_GET_TID_ADDRESS], arg ptr[out, intptr])

prctl$PR_SET_THP_DISABLE(option const[PR_SET_THP_DISABLE], arg boolptr)
prctl$PR_GET_THP_DISABLE(option const[PR_GET_THP_DISABLE])

prctl$PR_MPX_ENABLE_MANAGEMENT(option const[PR_MPX_ENABLE_MANAGEMENT])
prctl$PR_MPX_DISABLE_MANAGEMENT(option const[PR_MPX_DISABLE_MANAGEMENT])

prctl$PR_SET_FP_MODE(option const[PR_SET_FP_MODE], arg flags[prctl_fp_mode])
prctl$PR_GET_FP_MODE(option const[PR_GET_FP_MODE])

prctl_fp_mode = PR_FP_MODE_FR, PR_FP_MODE_FRE

prctl$PR_CAP_AMBIENT(option const[PR_CAP_AMBIENT], arg2 flags[prctl_cap_ambient], arg3 int32[0:CAP_LAST_CAP])

prctl_cap_ambient = PR_CAP_AMBIENT_IS_SET, PR_CAP_AMBIENT_RAISE, PR_CAP_AMBIENT_LOWER, PR_CAP_AMBIENT_CLEAR_ALL

prctl$PR_SVE_SET_VL(option const[PR_SVE_SET_VL], arg intptr[0:PR_SVE_SET_VL_ONEXEC])
prctl$PR_SVE_GET_VL(option const[PR_SVE_GET_VL], arg intptr[0:PR_SVE_VL_INHERIT])

prctl$PR_GET_SPECULATION_CTRL(option const[PR_GET_SPECULATION_CTRL], arg2 const[PR_SPEC_STORE_BYPASS], arg3 flags[pr_spec_mode])
prctl$PR_SET_SPECULATION_CTRL(option const[PR_SET_SPECULATION_CTRL], arg2 const[PR_SPEC_STORE_BYPASS])

pr_spec_mode = PR_SPEC_ENABLE, PR_SPEC_DISABLE, PR_SPEC_FORCE_DISABLE

arch_prctl$ARCH_GET_FS(code const[ARCH_GET_FS], arg ptr[out, int64])
arch_prctl$ARCH_GET_GS(code const[ARCH_GET_GS], arg ptr[out, int64])
arch_prctl$ARCH_SET_GS(code const[ARCH_SET_GS], arg int64)
arch_prctl$ARCH_GET_CPUID(code const[ARCH_GET_CPUID])
arch_prctl$ARCH_SET_CPUID(code const[ARCH_SET_CPUID], arg boolptr)
arch_prctl$ARCH_MAP_VDSO_X32(code const[ARCH_MAP_VDSO_X32], arg intptr)
arch_prctl$ARCH_MAP_VDSO_32(code const[ARCH_MAP_VDSO_32], arg intptr)
arch_prctl$ARCH_MAP_VDSO_64(code const[ARCH_MAP_VDSO_64], arg intptr)

_ = ARCH_SET_FS