From 1d44216fcf67bcee7a7dd19118e42d29cf9c63a7 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Sat, 17 Nov 2018 14:25:28 -0800 Subject: sys/linux: modernize prctl descriptions Use one syscall per command, refine arguments, etc. --- sys/linux/prctl.txt | 125 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 107 insertions(+), 18 deletions(-) (limited to 'sys/linux/prctl.txt') 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 -include -include +include +include +include +include +include include -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 -- cgit mrf-deployment