aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/prctl.txt
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-11-17 14:25:28 -0800
committerDmitry Vyukov <dvyukov@google.com>2018-11-17 15:46:37 -0800
commit1d44216fcf67bcee7a7dd19118e42d29cf9c63a7 (patch)
tree1b8a07ff67f61532f38bf4a49c216530f9eb70e1 /sys/linux/prctl.txt
parent1df0de78f9718170f7b693c99ea59681b88b2bf7 (diff)
sys/linux: modernize prctl descriptions
Use one syscall per command, refine arguments, etc.
Diffstat (limited to 'sys/linux/prctl.txt')
-rw-r--r--sys/linux/prctl.txt125
1 files changed, 107 insertions, 18 deletions
diff --git a/sys/linux/prctl.txt b/sys/linux/prctl.txt
index c5e85927f..4333cd5d3 100644
--- a/sys/linux/prctl.txt
+++ b/sys/linux/prctl.txt
@@ -2,29 +2,118 @@
# 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/prctl.h>
-include <linux/seccomp.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$void(option flags[prctl_code_void])
-prctl$intptr(option flags[prctl_code_intptr], arg intptr)
-prctl$getreaper(option flags[prctl_code_getreaper], arg ptr[out, intptr])
-prctl$setendian(option const[PR_SET_ENDIAN], arg flags[prctl_endian])
-prctl$setfpexc(option const[PR_SET_FPEXC], arg flags[prctl_fpexc])
-prctl$setname(option const[PR_SET_NAME], name ptr[in, string])
-prctl$getname(option const[PR_GET_NAME], name buffer[out])
-prctl$setptracer(option const[PR_SET_PTRACER], pid pid)
-prctl$seccomp(option const[PR_SET_SECCOMP], mode flags[prctl_seccomp_mode], prog ptr[in, sock_fprog])
-prctl$setmm(option1 const[PR_SET_MM], option2 flags[prctl_mm_option], val vma)
+prctl$PR_SET_PDEATHSIG(option const[PR_SET_PDEATHSIG], arg signalno)
+prctl$PR_GET_PDEATHSIG(option const[PR_GET_PDEATHSIG], arg ptr[out, int32])
-arch_prctl(code flags[arch_prctl_code], addr buffer[in])
+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_code_void = PR_GET_DUMPABLE, PR_GET_KEEPCAPS, PR_GET_NO_NEW_PRIVS, PR_GET_SECCOMP, PR_GET_SECUREBITS, PR_GET_TIMERSLACK, PR_GET_TIMING, PR_TASK_PERF_EVENTS_DISABLE, PR_TASK_PERF_EVENTS_ENABLE, PR_MCE_KILL_GET
-prctl_code_intptr = PR_CAPBSET_READ, PR_CAPBSET_DROP, PR_SET_CHILD_SUBREAPER, PR_SET_DUMPABLE, PR_SET_FPEMU, PR_SET_KEEPCAPS, PR_SET_NO_NEW_PRIVS, PR_SET_PDEATHSIG, PR_SET_SECUREBITS, PR_SET_TIMERSLACK, PR_SET_TIMING, PR_SET_TSC, PR_SET_UNALIGN, PR_MCE_KILL
-prctl_code_getreaper = PR_GET_CHILD_SUBREAPER, PR_GET_ENDIAN, PR_GET_FPEMU, PR_GET_FPEXC, PR_GET_PDEATHSIG, PR_GET_TID_ADDRESS, PR_GET_TSC, PR_GET_UNALIGN
-prctl_endian = PR_ENDIAN_BIG, PR_ENDIAN_LITTLE, PR_ENDIAN_PPC_LITTLE
-prctl_fpexc = 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
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$setmm(option1 const[PR_SET_MM], option2 flags[prctl_mm_option], val vma)
+
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
+
+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(code flags[arch_prctl_code], addr buffer[in])
+
arch_prctl_code = ARCH_GET_FS, ARCH_SET_GS, ARCH_GET_GS
_ = ARCH_SET_FS