Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240906114930.17884-1-jane400@postmarketos.org>
Date: Fri,  6 Sep 2024 13:49:30 +0200
From: jane400 <jane400@...tmarketos.org>
To: musl@...ts.openwall.com
Cc: jane400 <jane400@...tmarketos.org>
Subject: [PATCH] sys/prctl.h: use linux uapi header

The file also includes backports until 2023 for older kernels.

There are no exisiting UAPI guards in the kernel for this header
and as complex projects like systemd sometimes use both, it was
easiest to just use the defintions from the kernel directly instead
of copying in them. This way we're never redefining stuff in end-user
applications and get the benefit of using the latest API that is
available on this system.
---
 include/sys/prctl.h | 216 +++++++++++---------------------------------
 1 file changed, 55 insertions(+), 161 deletions(-)

diff --git a/include/sys/prctl.h b/include/sys/prctl.h
index 087a75c9..49c39b83 100644
--- a/include/sys/prctl.h
+++ b/include/sys/prctl.h
@@ -6,176 +6,70 @@ extern "C" {
 #endif
 
 #include <stdint.h>
+#include <linux/prctl.h>
 
-#define PR_SET_PDEATHSIG  1
-#define PR_GET_PDEATHSIG  2
-#define PR_GET_DUMPABLE   3
-#define PR_SET_DUMPABLE   4
-#define PR_GET_UNALIGN   5
-#define PR_SET_UNALIGN   6
-#define PR_UNALIGN_NOPRINT 1
-#define PR_UNALIGN_SIGBUS 2
-#define PR_GET_KEEPCAPS   7
-#define PR_SET_KEEPCAPS   8
-#define PR_GET_FPEMU  9
-#define PR_SET_FPEMU 10
-#define PR_FPEMU_NOPRINT 1
-#define PR_FPEMU_SIGFPE 2
-#define PR_GET_FPEXC 11
-#define PR_SET_FPEXC 12
-#define PR_FP_EXC_SW_ENABLE 0x80
-#define PR_FP_EXC_DIV  0x010000
-#define PR_FP_EXC_OVF  0x020000
-#define PR_FP_EXC_UND  0x040000
-#define PR_FP_EXC_RES  0x080000
-#define PR_FP_EXC_INV  0x100000
-#define PR_FP_EXC_DISABLED 0
-#define PR_FP_EXC_NONRECOV 1
-#define PR_FP_EXC_ASYNC 2
-#define PR_FP_EXC_PRECISE 3
-#define PR_GET_TIMING   13
-#define PR_SET_TIMING   14
-#define PR_TIMING_STATISTICAL  0
-#define PR_TIMING_TIMESTAMP    1
-#define PR_SET_NAME    15
-#define PR_GET_NAME    16
-#define PR_GET_ENDIAN 19
-#define PR_SET_ENDIAN 20
-#define PR_ENDIAN_BIG 0
-#define PR_ENDIAN_LITTLE 1
-#define PR_ENDIAN_PPC_LITTLE 2
-#define PR_GET_SECCOMP 21
-#define PR_SET_SECCOMP 22
-#define PR_CAPBSET_READ 23
-#define PR_CAPBSET_DROP 24
-#define PR_GET_TSC 25
-#define PR_SET_TSC 26
-#define PR_TSC_ENABLE 1
-#define PR_TSC_SIGSEGV 2
-#define PR_GET_SECUREBITS 27
-#define PR_SET_SECUREBITS 28
-#define PR_SET_TIMERSLACK 29
-#define PR_GET_TIMERSLACK 30
+// Forward declaring newer prctls, if we have an outdated kernel...
 
-#define PR_TASK_PERF_EVENTS_DISABLE             31
-#define PR_TASK_PERF_EVENTS_ENABLE              32
-
-#define PR_MCE_KILL     33
-#define PR_MCE_KILL_CLEAR   0
-#define PR_MCE_KILL_SET     1
-#define PR_MCE_KILL_LATE    0
-#define PR_MCE_KILL_EARLY   1
-#define PR_MCE_KILL_DEFAULT 2
-#define PR_MCE_KILL_GET 34
-
-#define PR_SET_MM               35
-#define PR_SET_MM_START_CODE           1
-#define PR_SET_MM_END_CODE             2
-#define PR_SET_MM_START_DATA           3
-#define PR_SET_MM_END_DATA             4
-#define PR_SET_MM_START_STACK          5
-#define PR_SET_MM_START_BRK            6
-#define PR_SET_MM_BRK                  7
-#define PR_SET_MM_ARG_START            8
-#define PR_SET_MM_ARG_END              9
-#define PR_SET_MM_ENV_START            10
-#define PR_SET_MM_ENV_END              11
-#define PR_SET_MM_AUXV                 12
-#define PR_SET_MM_EXE_FILE             13
-#define PR_SET_MM_MAP                  14
-#define PR_SET_MM_MAP_SIZE             15
-
-struct prctl_mm_map {
-	uint64_t start_code;
-	uint64_t end_code;
-	uint64_t start_data;
-	uint64_t end_data;
-	uint64_t start_brk;
-	uint64_t brk;
-	uint64_t start_stack;
-	uint64_t arg_start;
-	uint64_t arg_end;
-	uint64_t env_start;
-	uint64_t env_end;
-	uint64_t *auxv;
-	uint32_t auxv_size;
-	uint32_t exe_fd;
-};
-
-#define PR_SET_PTRACER 0x59616d61
-#define PR_SET_PTRACER_ANY (-1UL)
-
-#define PR_SET_CHILD_SUBREAPER  36
-#define PR_GET_CHILD_SUBREAPER  37
-
-#define PR_SET_NO_NEW_PRIVS     38
-#define PR_GET_NO_NEW_PRIVS     39
-
-#define PR_GET_TID_ADDRESS      40
-
-#define PR_SET_THP_DISABLE      41
-#define PR_GET_THP_DISABLE      42
-
-#define PR_MPX_ENABLE_MANAGEMENT  43
-#define PR_MPX_DISABLE_MANAGEMENT 44
-
-#define PR_SET_FP_MODE          45
-#define PR_GET_FP_MODE          46
-#define PR_FP_MODE_FR (1 << 0)
-#define PR_FP_MODE_FRE (1 << 1)
-
-#define PR_CAP_AMBIENT          47
-#define PR_CAP_AMBIENT_IS_SET   1
-#define PR_CAP_AMBIENT_RAISE    2
-#define PR_CAP_AMBIENT_LOWER    3
-#define PR_CAP_AMBIENT_CLEAR_ALL 4
+// 2023: mm: implement memory-deny-write-execute as a prctl
+#ifndef PR_SET_MDWE
+# define PR_SET_MDWE 65
+#  define PR_MDWE_REFUSE_EXEC_GAIN 1
+# define PR_GET_MDWE 66
+#endif
 
-#define PR_SVE_SET_VL           50
-#define PR_SVE_SET_VL_ONEXEC (1 << 18)
-#define PR_SVE_GET_VL           51
-#define PR_SVE_VL_LEN_MASK 0xffff
-#define PR_SVE_VL_INHERIT (1 << 17)
+// 2023: prctl: add PR_GET_AUXV to copy auxv to userspace
+#ifndef PR_GET_AUXV
+# define PR_GET_AUXV 0x41555856
+#endif
 
-#define PR_GET_SPECULATION_CTRL 52
-#define PR_SET_SPECULATION_CTRL 53
-#define PR_SPEC_STORE_BYPASS 0
-#define PR_SPEC_INDIRECT_BRANCH 1
-#define PR_SPEC_NOT_AFFECTED 0
-#define PR_SPEC_PRCTL (1UL << 0)
-#define PR_SPEC_ENABLE (1UL << 1)
-#define PR_SPEC_DISABLE (1UL << 2)
-#define PR_SPEC_FORCE_DISABLE (1UL << 3)
-#define PR_SPEC_DISABLE_NOEXEC (1UL << 4)
+// 2023: mm: add new api to enable ksm per process
+#ifndef PR_SET_MEMORY_MERGE
+# define PR_SET_MEMORY_MERGE 67
+# define PR_GET_MEMORY_MERGE 68
+#endif
 
-#define PR_PAC_RESET_KEYS       54
-#define PR_PAC_APIAKEY (1UL << 0)
-#define PR_PAC_APIBKEY (1UL << 1)
-#define PR_PAC_APDAKEY (1UL << 2)
-#define PR_PAC_APDBKEY (1UL << 3)
-#define PR_PAC_APGAKEY (1UL << 4)
+// 2023: riscv: Add prctl controls for userspace vector management
+#ifndef PR_RISCV_V_SET_CONTROL
+# define PR_RISCV_V_SET_CONTROL 69
+# define PR_RISCV_V_GET_CONTROL	70
+#  define PR_RISCV_V_VSTATE_CTRL_DEFAULT 0
+#  define PR_RISCV_V_VSTATE_CTRL_OFF 1
+#  define PR_RISCV_V_VSTATE_CTRL_ON 2
+#  define PR_RISCV_V_VSTATE_CTRL_INHERIT (1 << 4)
+#  define PR_RISCV_V_VSTATE_CTRL_CUR_MASK 0x3
+#  define PR_RISCV_V_VSTATE_CTRL_NEXT_MASK 0xc
+#  define PR_RISCV_V_VSTATE_CTRL_MASK 0x1f
+#endif
 
-#define PR_SET_TAGGED_ADDR_CTRL 55
-#define PR_GET_TAGGED_ADDR_CTRL 56
-#define PR_TAGGED_ADDR_ENABLE (1UL << 0)
-#define PR_MTE_TCF_SHIFT 1
-#define PR_MTE_TCF_NONE  (0UL << 1)
-#define PR_MTE_TCF_SYNC  (1UL << 1)
-#define PR_MTE_TCF_ASYNC (2UL << 1)
-#define PR_MTE_TCF_MASK  (3UL << 1)
-#define PR_MTE_TAG_SHIFT 3
-#define PR_MTE_TAG_MASK  (0xffffUL << 3)
 
-#define PR_SET_IO_FLUSHER 57
-#define PR_GET_IO_FLUSHER 58
+// 2023: mm: add a NO_INHERIT flag to the PR_SET_MDWE prctl
+#ifndef PR_MDWE_NO_INHERIT
+# define PR_MDWE_NO_INHERIT (1UL << 1)
+#endif
 
-#define PR_SET_SYSCALL_USER_DISPATCH 59
-#define PR_SYS_DISPATCH_OFF 0
-#define PR_SYS_DISPATCH_ON 1
-#define SYSCALL_DISPATCH_FILTER_ALLOW 0
-#define SYSCALL_DISPATCH_FILTER_BLOCK 1
+// 2024: riscv+ppc extensions from riscv-for-linus-6.10-mw1 merged into mainline
+#ifndef PR_RISCV_SET_ICACHE_FLUSH_CTX
+# define PR_RISCV_SET_ICACHE_FLUSH_CTX 71
+# define PR_RISCV_CTX_SW_FENCEI_ON 0
+# define PR_RISCV_CTX_SW_FENCEI_OFF 1
+# define PR_RISCV_SCOPE_PER_PROCESS 0
+# define PR_RISCV_SCOPE_PER_THREAD 1
+#endif
 
-#define PR_PAC_SET_ENABLED_KEYS 60
-#define PR_PAC_GET_ENABLED_KEYS 61
+#ifdef PR_PPC_GET_DEXCR
+# define PR_PPC_GET_DEXCR 72
+# define PR_PPC_SET_DEXCR 73
+#  define PR_PPC_DEXCR_SBHE 0
+#  define PR_PPC_DEXCR_IBRTPD 1
+#  define PR_PPC_DEXCR_SRAPD 2
+#  define PR_PPC_DEXCR_NPHIE 3
+#  define PR_PPC_DEXCR_CTRL_EDITABLE 0x1
+#  define PR_PPC_DEXCR_CTRL_SET 0x2
+#  define PR_PPC_DEXCR_CTRL_CLEAR 0x4
+#  define PR_PPC_DEXCR_CTRL_SET_ONEXEC 0x8
+#  define PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC 0x10
+#  define PR_PPC_DEXCR_CTRL_MASK 0x1f
+#endif
 
 int prctl (int, ...);
 
-- 
2.46.0

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.