| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | 
|---|
| 2 | #ifndef _LINUX_PRCTL_H | 
|---|
| 3 | #define _LINUX_PRCTL_H | 
|---|
| 4 |  | 
|---|
| 5 | #include <linux/types.h> | 
|---|
| 6 |  | 
|---|
| 7 | /* Values to pass as first argument to prctl() */ | 
|---|
| 8 |  | 
|---|
| 9 | #define PR_SET_PDEATHSIG  1  /* Second arg is a signal */ | 
|---|
| 10 | #define PR_GET_PDEATHSIG  2  /* Second arg is a ptr to return the signal */ | 
|---|
| 11 |  | 
|---|
| 12 | /* Get/set current->mm->dumpable */ | 
|---|
| 13 | #define PR_GET_DUMPABLE   3 | 
|---|
| 14 | #define PR_SET_DUMPABLE   4 | 
|---|
| 15 |  | 
|---|
| 16 | /* Get/set unaligned access control bits (if meaningful) */ | 
|---|
| 17 | #define PR_GET_UNALIGN	  5 | 
|---|
| 18 | #define PR_SET_UNALIGN	  6 | 
|---|
| 19 | # define PR_UNALIGN_NOPRINT	1	/* silently fix up unaligned user accesses */ | 
|---|
| 20 | # define PR_UNALIGN_SIGBUS	2	/* generate SIGBUS on unaligned user access */ | 
|---|
| 21 |  | 
|---|
| 22 | /* Get/set whether or not to drop capabilities on setuid() away from | 
|---|
| 23 | * uid 0 (as per security/commoncap.c) */ | 
|---|
| 24 | #define PR_GET_KEEPCAPS   7 | 
|---|
| 25 | #define PR_SET_KEEPCAPS   8 | 
|---|
| 26 |  | 
|---|
| 27 | /* Get/set floating-point emulation control bits (if meaningful) */ | 
|---|
| 28 | #define PR_GET_FPEMU  9 | 
|---|
| 29 | #define PR_SET_FPEMU 10 | 
|---|
| 30 | # define PR_FPEMU_NOPRINT	1	/* silently emulate fp operations accesses */ | 
|---|
| 31 | # define PR_FPEMU_SIGFPE	2	/* don't emulate fp operations, send SIGFPE instead */ | 
|---|
| 32 |  | 
|---|
| 33 | /* Get/set floating-point exception mode (if meaningful) */ | 
|---|
| 34 | #define PR_GET_FPEXC	11 | 
|---|
| 35 | #define PR_SET_FPEXC	12 | 
|---|
| 36 | # define PR_FP_EXC_SW_ENABLE	0x80	/* Use FPEXC for FP exception enables */ | 
|---|
| 37 | # define PR_FP_EXC_DIV		0x010000	/* floating point divide by zero */ | 
|---|
| 38 | # define PR_FP_EXC_OVF		0x020000	/* floating point overflow */ | 
|---|
| 39 | # define PR_FP_EXC_UND		0x040000	/* floating point underflow */ | 
|---|
| 40 | # define PR_FP_EXC_RES		0x080000	/* floating point inexact result */ | 
|---|
| 41 | # define PR_FP_EXC_INV		0x100000	/* floating point invalid operation */ | 
|---|
| 42 | # define PR_FP_EXC_DISABLED	0	/* FP exceptions disabled */ | 
|---|
| 43 | # define PR_FP_EXC_NONRECOV	1	/* async non-recoverable exc. mode */ | 
|---|
| 44 | # define PR_FP_EXC_ASYNC	2	/* async recoverable exception mode */ | 
|---|
| 45 | # define PR_FP_EXC_PRECISE	3	/* precise exception mode */ | 
|---|
| 46 |  | 
|---|
| 47 | /* Get/set whether we use statistical process timing or accurate timestamp | 
|---|
| 48 | * based process timing */ | 
|---|
| 49 | #define PR_GET_TIMING   13 | 
|---|
| 50 | #define PR_SET_TIMING   14 | 
|---|
| 51 | # define PR_TIMING_STATISTICAL  0       /* Normal, traditional, | 
|---|
| 52 | statistical process timing */ | 
|---|
| 53 | # define PR_TIMING_TIMESTAMP    1       /* Accurate timestamp based | 
|---|
| 54 | process timing */ | 
|---|
| 55 |  | 
|---|
| 56 | #define PR_SET_NAME    15		/* Set process name */ | 
|---|
| 57 | #define PR_GET_NAME    16		/* Get process name */ | 
|---|
| 58 |  | 
|---|
| 59 | /* Get/set process endian */ | 
|---|
| 60 | #define PR_GET_ENDIAN	19 | 
|---|
| 61 | #define PR_SET_ENDIAN	20 | 
|---|
| 62 | # define PR_ENDIAN_BIG		0 | 
|---|
| 63 | # define PR_ENDIAN_LITTLE	1	/* True little endian mode */ | 
|---|
| 64 | # define PR_ENDIAN_PPC_LITTLE	2	/* "PowerPC" pseudo little endian */ | 
|---|
| 65 |  | 
|---|
| 66 | /* Get/set process seccomp mode */ | 
|---|
| 67 | #define PR_GET_SECCOMP	21 | 
|---|
| 68 | #define PR_SET_SECCOMP	22 | 
|---|
| 69 |  | 
|---|
| 70 | /* Get/set the capability bounding set (as per security/commoncap.c) */ | 
|---|
| 71 | #define PR_CAPBSET_READ 23 | 
|---|
| 72 | #define PR_CAPBSET_DROP 24 | 
|---|
| 73 |  | 
|---|
| 74 | /* Get/set the process' ability to use the timestamp counter instruction */ | 
|---|
| 75 | #define PR_GET_TSC 25 | 
|---|
| 76 | #define PR_SET_TSC 26 | 
|---|
| 77 | # define PR_TSC_ENABLE		1	/* allow the use of the timestamp counter */ | 
|---|
| 78 | # define PR_TSC_SIGSEGV		2	/* throw a SIGSEGV instead of reading the TSC */ | 
|---|
| 79 |  | 
|---|
| 80 | /* Get/set securebits (as per security/commoncap.c) */ | 
|---|
| 81 | #define PR_GET_SECUREBITS 27 | 
|---|
| 82 | #define PR_SET_SECUREBITS 28 | 
|---|
| 83 |  | 
|---|
| 84 | /* | 
|---|
| 85 | * Get/set the timerslack as used by poll/select/nanosleep | 
|---|
| 86 | * A value of 0 means "use default" | 
|---|
| 87 | */ | 
|---|
| 88 | #define PR_SET_TIMERSLACK 29 | 
|---|
| 89 | #define PR_GET_TIMERSLACK 30 | 
|---|
| 90 |  | 
|---|
| 91 | #define PR_TASK_PERF_EVENTS_DISABLE		31 | 
|---|
| 92 | #define PR_TASK_PERF_EVENTS_ENABLE		32 | 
|---|
| 93 |  | 
|---|
| 94 | /* | 
|---|
| 95 | * Set early/late kill mode for hwpoison memory corruption. | 
|---|
| 96 | * This influences when the process gets killed on a memory corruption. | 
|---|
| 97 | */ | 
|---|
| 98 | #define PR_MCE_KILL	33 | 
|---|
| 99 | # define PR_MCE_KILL_CLEAR   0 | 
|---|
| 100 | # define PR_MCE_KILL_SET     1 | 
|---|
| 101 |  | 
|---|
| 102 | # define PR_MCE_KILL_LATE    0 | 
|---|
| 103 | # define PR_MCE_KILL_EARLY   1 | 
|---|
| 104 | # define PR_MCE_KILL_DEFAULT 2 | 
|---|
| 105 |  | 
|---|
| 106 | #define PR_MCE_KILL_GET 34 | 
|---|
| 107 |  | 
|---|
| 108 | /* | 
|---|
| 109 | * Tune up process memory map specifics. | 
|---|
| 110 | */ | 
|---|
| 111 | #define PR_SET_MM		35 | 
|---|
| 112 | # define PR_SET_MM_START_CODE		1 | 
|---|
| 113 | # define PR_SET_MM_END_CODE		2 | 
|---|
| 114 | # define PR_SET_MM_START_DATA		3 | 
|---|
| 115 | # define PR_SET_MM_END_DATA		4 | 
|---|
| 116 | # define PR_SET_MM_START_STACK		5 | 
|---|
| 117 | # define PR_SET_MM_START_BRK		6 | 
|---|
| 118 | # define PR_SET_MM_BRK			7 | 
|---|
| 119 | # define PR_SET_MM_ARG_START		8 | 
|---|
| 120 | # define PR_SET_MM_ARG_END		9 | 
|---|
| 121 | # define PR_SET_MM_ENV_START		10 | 
|---|
| 122 | # define PR_SET_MM_ENV_END		11 | 
|---|
| 123 | # define PR_SET_MM_AUXV			12 | 
|---|
| 124 | # define PR_SET_MM_EXE_FILE		13 | 
|---|
| 125 | # define PR_SET_MM_MAP			14 | 
|---|
| 126 | # define PR_SET_MM_MAP_SIZE		15 | 
|---|
| 127 |  | 
|---|
| 128 | /* | 
|---|
| 129 | * This structure provides new memory descriptor | 
|---|
| 130 | * map which mostly modifies /proc/pid/stat[m] | 
|---|
| 131 | * output for a task. This mostly done in a | 
|---|
| 132 | * sake of checkpoint/restore functionality. | 
|---|
| 133 | */ | 
|---|
| 134 | struct prctl_mm_map { | 
|---|
| 135 | __u64	start_code;		/* code section bounds */ | 
|---|
| 136 | __u64	end_code; | 
|---|
| 137 | __u64	start_data;		/* data section bounds */ | 
|---|
| 138 | __u64	end_data; | 
|---|
| 139 | __u64	start_brk;		/* heap for brk() syscall */ | 
|---|
| 140 | __u64	brk; | 
|---|
| 141 | __u64	start_stack;		/* stack starts at */ | 
|---|
| 142 | __u64	arg_start;		/* command line arguments bounds */ | 
|---|
| 143 | __u64	arg_end; | 
|---|
| 144 | __u64	env_start;		/* environment variables bounds */ | 
|---|
| 145 | __u64	env_end; | 
|---|
| 146 | __u64	*auxv;			/* auxiliary vector */ | 
|---|
| 147 | __u32	auxv_size;		/* vector size */ | 
|---|
| 148 | __u32	exe_fd;			/* /proc/$pid/exe link file */ | 
|---|
| 149 | }; | 
|---|
| 150 |  | 
|---|
| 151 | /* | 
|---|
| 152 | * Set specific pid that is allowed to ptrace the current task. | 
|---|
| 153 | * A value of 0 mean "no process". | 
|---|
| 154 | */ | 
|---|
| 155 | #define PR_SET_PTRACER 0x59616d61 | 
|---|
| 156 | # define PR_SET_PTRACER_ANY ((unsigned long)-1) | 
|---|
| 157 |  | 
|---|
| 158 | #define PR_SET_CHILD_SUBREAPER	36 | 
|---|
| 159 | #define PR_GET_CHILD_SUBREAPER	37 | 
|---|
| 160 |  | 
|---|
| 161 | /* | 
|---|
| 162 | * If no_new_privs is set, then operations that grant new privileges (i.e. | 
|---|
| 163 | * execve) will either fail or not grant them.  This affects suid/sgid, | 
|---|
| 164 | * file capabilities, and LSMs. | 
|---|
| 165 | * | 
|---|
| 166 | * Operations that merely manipulate or drop existing privileges (setresuid, | 
|---|
| 167 | * capset, etc.) will still work.  Drop those privileges if you want them gone. | 
|---|
| 168 | * | 
|---|
| 169 | * Changing LSM security domain is considered a new privilege.  So, for example, | 
|---|
| 170 | * asking selinux for a specific new context (e.g. with runcon) will result | 
|---|
| 171 | * in execve returning -EPERM. | 
|---|
| 172 | * | 
|---|
| 173 | * See Documentation/prctl/no_new_privs.txt for more details. | 
|---|
| 174 | */ | 
|---|
| 175 | #define PR_SET_NO_NEW_PRIVS	38 | 
|---|
| 176 | #define PR_GET_NO_NEW_PRIVS	39 | 
|---|
| 177 |  | 
|---|
| 178 | #define PR_GET_TID_ADDRESS	40 | 
|---|
| 179 |  | 
|---|
| 180 | #define PR_SET_THP_DISABLE	41 | 
|---|
| 181 | #define PR_GET_THP_DISABLE	42 | 
|---|
| 182 |  | 
|---|
| 183 | /* | 
|---|
| 184 | * Tell the kernel to start/stop helping userspace manage bounds tables. | 
|---|
| 185 | */ | 
|---|
| 186 | #define PR_MPX_ENABLE_MANAGEMENT  43 | 
|---|
| 187 | #define PR_MPX_DISABLE_MANAGEMENT 44 | 
|---|
| 188 |  | 
|---|
| 189 | #define PR_SET_FP_MODE		45 | 
|---|
| 190 | #define PR_GET_FP_MODE		46 | 
|---|
| 191 | # define PR_FP_MODE_FR		(1 << 0)	/* 64b FP registers */ | 
|---|
| 192 | # define PR_FP_MODE_FRE		(1 << 1)	/* 32b compatibility */ | 
|---|
| 193 |  | 
|---|
| 194 | /* Control the ambient capability set */ | 
|---|
| 195 | #define PR_CAP_AMBIENT			47 | 
|---|
| 196 | # define PR_CAP_AMBIENT_IS_SET		1 | 
|---|
| 197 | # define PR_CAP_AMBIENT_RAISE		2 | 
|---|
| 198 | # define PR_CAP_AMBIENT_LOWER		3 | 
|---|
| 199 | # define PR_CAP_AMBIENT_CLEAR_ALL	4 | 
|---|
| 200 |  | 
|---|
| 201 | /* arm64 Scalable Vector Extension controls */ | 
|---|
| 202 | /* Flag values must be kept in sync with ptrace NT_ARM_SVE interface */ | 
|---|
| 203 | #define PR_SVE_SET_VL			50	/* set task vector length */ | 
|---|
| 204 | # define PR_SVE_SET_VL_ONEXEC		(1 << 18) /* defer effect until exec */ | 
|---|
| 205 | #define PR_SVE_GET_VL			51	/* get task vector length */ | 
|---|
| 206 | /* Bits common to PR_SVE_SET_VL and PR_SVE_GET_VL */ | 
|---|
| 207 | # define PR_SVE_VL_LEN_MASK		0xffff | 
|---|
| 208 | # define PR_SVE_VL_INHERIT		(1 << 17) /* inherit across exec */ | 
|---|
| 209 |  | 
|---|
| 210 | /* Per task speculation control */ | 
|---|
| 211 | #define PR_GET_SPECULATION_CTRL		52 | 
|---|
| 212 | #define PR_SET_SPECULATION_CTRL		53 | 
|---|
| 213 | /* Speculation control variants */ | 
|---|
| 214 | # define PR_SPEC_STORE_BYPASS		0 | 
|---|
| 215 | # define PR_SPEC_INDIRECT_BRANCH	1 | 
|---|
| 216 | /* Return and control values for PR_SET/GET_SPECULATION_CTRL */ | 
|---|
| 217 | # define PR_SPEC_NOT_AFFECTED		0 | 
|---|
| 218 | # define PR_SPEC_PRCTL			(1UL << 0) | 
|---|
| 219 | # define PR_SPEC_ENABLE			(1UL << 1) | 
|---|
| 220 | # define PR_SPEC_DISABLE		(1UL << 2) | 
|---|
| 221 | # define PR_SPEC_FORCE_DISABLE		(1UL << 3) | 
|---|
| 222 |  | 
|---|
| 223 | /* | 
|---|
| 224 | * Control the LSM specific peer information | 
|---|
| 225 | * | 
|---|
| 226 | * The Ubuntu kernel provides an early preview of LSM Stacking. Use these | 
|---|
| 227 | * PRCTLs at your own risk. Their values are not guaranteed to be stable in the | 
|---|
| 228 | * case of colliding with an upstream PRCTL. | 
|---|
| 229 | */ | 
|---|
| 230 | #define	PR_GET_DISPLAY_LSM	1000000 | 
|---|
| 231 | #define	PR_SET_DISPLAY_LSM	1000001 | 
|---|
| 232 |  | 
|---|
| 233 | #endif /* _LINUX_PRCTL_H */ | 
|---|
| 234 |  | 
|---|