| 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/userspace-api/no_new_privs.rst 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 | /* | 
|---|
| 181 | * Flags for PR_SET_THP_DISABLE are only applicable when disabling. Bit 0 | 
|---|
| 182 | * is reserved, so PR_GET_THP_DISABLE can return "1 | flags", to effectively | 
|---|
| 183 | * return "1" when no flags were specified for PR_SET_THP_DISABLE. | 
|---|
| 184 | */ | 
|---|
| 185 | #define PR_SET_THP_DISABLE	41 | 
|---|
| 186 | /* | 
|---|
| 187 | * Don't disable THPs when explicitly advised (e.g., MADV_HUGEPAGE / | 
|---|
| 188 | * VM_HUGEPAGE, MADV_COLLAPSE). | 
|---|
| 189 | */ | 
|---|
| 190 | # define PR_THP_DISABLE_EXCEPT_ADVISED	(1 << 1) | 
|---|
| 191 | #define PR_GET_THP_DISABLE	42 | 
|---|
| 192 |  | 
|---|
| 193 | /* | 
|---|
| 194 | * No longer implemented, but left here to ensure the numbers stay reserved: | 
|---|
| 195 | */ | 
|---|
| 196 | #define PR_MPX_ENABLE_MANAGEMENT  43 | 
|---|
| 197 | #define PR_MPX_DISABLE_MANAGEMENT 44 | 
|---|
| 198 |  | 
|---|
| 199 | #define PR_SET_FP_MODE		45 | 
|---|
| 200 | #define PR_GET_FP_MODE		46 | 
|---|
| 201 | # define PR_FP_MODE_FR		(1 << 0)	/* 64b FP registers */ | 
|---|
| 202 | # define PR_FP_MODE_FRE		(1 << 1)	/* 32b compatibility */ | 
|---|
| 203 |  | 
|---|
| 204 | /* Control the ambient capability set */ | 
|---|
| 205 | #define PR_CAP_AMBIENT			47 | 
|---|
| 206 | # define PR_CAP_AMBIENT_IS_SET		1 | 
|---|
| 207 | # define PR_CAP_AMBIENT_RAISE		2 | 
|---|
| 208 | # define PR_CAP_AMBIENT_LOWER		3 | 
|---|
| 209 | # define PR_CAP_AMBIENT_CLEAR_ALL	4 | 
|---|
| 210 |  | 
|---|
| 211 | /* arm64 Scalable Vector Extension controls */ | 
|---|
| 212 | /* Flag values must be kept in sync with ptrace NT_ARM_SVE interface */ | 
|---|
| 213 | #define PR_SVE_SET_VL			50	/* set task vector length */ | 
|---|
| 214 | # define PR_SVE_SET_VL_ONEXEC		(1 << 18) /* defer effect until exec */ | 
|---|
| 215 | #define PR_SVE_GET_VL			51	/* get task vector length */ | 
|---|
| 216 | /* Bits common to PR_SVE_SET_VL and PR_SVE_GET_VL */ | 
|---|
| 217 | # define PR_SVE_VL_LEN_MASK		0xffff | 
|---|
| 218 | # define PR_SVE_VL_INHERIT		(1 << 17) /* inherit across exec */ | 
|---|
| 219 |  | 
|---|
| 220 | /* Per task speculation control */ | 
|---|
| 221 | #define PR_GET_SPECULATION_CTRL		52 | 
|---|
| 222 | #define PR_SET_SPECULATION_CTRL		53 | 
|---|
| 223 | /* Speculation control variants */ | 
|---|
| 224 | # define PR_SPEC_STORE_BYPASS		0 | 
|---|
| 225 | # define PR_SPEC_INDIRECT_BRANCH	1 | 
|---|
| 226 | # define PR_SPEC_L1D_FLUSH		2 | 
|---|
| 227 | /* Return and control values for PR_SET/GET_SPECULATION_CTRL */ | 
|---|
| 228 | # define PR_SPEC_NOT_AFFECTED		0 | 
|---|
| 229 | # define PR_SPEC_PRCTL			(1UL << 0) | 
|---|
| 230 | # define PR_SPEC_ENABLE			(1UL << 1) | 
|---|
| 231 | # define PR_SPEC_DISABLE		(1UL << 2) | 
|---|
| 232 | # define PR_SPEC_FORCE_DISABLE		(1UL << 3) | 
|---|
| 233 | # define PR_SPEC_DISABLE_NOEXEC		(1UL << 4) | 
|---|
| 234 |  | 
|---|
| 235 | /* Reset arm64 pointer authentication keys */ | 
|---|
| 236 | #define PR_PAC_RESET_KEYS		54 | 
|---|
| 237 | # define PR_PAC_APIAKEY			(1UL << 0) | 
|---|
| 238 | # define PR_PAC_APIBKEY			(1UL << 1) | 
|---|
| 239 | # define PR_PAC_APDAKEY			(1UL << 2) | 
|---|
| 240 | # define PR_PAC_APDBKEY			(1UL << 3) | 
|---|
| 241 | # define PR_PAC_APGAKEY			(1UL << 4) | 
|---|
| 242 |  | 
|---|
| 243 | /* Tagged user address controls for arm64 and RISC-V */ | 
|---|
| 244 | #define PR_SET_TAGGED_ADDR_CTRL		55 | 
|---|
| 245 | #define PR_GET_TAGGED_ADDR_CTRL		56 | 
|---|
| 246 | # define PR_TAGGED_ADDR_ENABLE		(1UL << 0) | 
|---|
| 247 | /* MTE tag check fault modes */ | 
|---|
| 248 | # define PR_MTE_TCF_NONE		0UL | 
|---|
| 249 | # define PR_MTE_TCF_SYNC		(1UL << 1) | 
|---|
| 250 | # define PR_MTE_TCF_ASYNC		(1UL << 2) | 
|---|
| 251 | # define PR_MTE_TCF_MASK		(PR_MTE_TCF_SYNC | PR_MTE_TCF_ASYNC) | 
|---|
| 252 | /* MTE tag inclusion mask */ | 
|---|
| 253 | # define PR_MTE_TAG_SHIFT		3 | 
|---|
| 254 | # define PR_MTE_TAG_MASK		(0xffffUL << PR_MTE_TAG_SHIFT) | 
|---|
| 255 | /* Unused; kept only for source compatibility */ | 
|---|
| 256 | # define PR_MTE_TCF_SHIFT		1 | 
|---|
| 257 | /* MTE tag check store only */ | 
|---|
| 258 | # define PR_MTE_STORE_ONLY		(1UL << 19) | 
|---|
| 259 | /* RISC-V pointer masking tag length */ | 
|---|
| 260 | # define PR_PMLEN_SHIFT			24 | 
|---|
| 261 | # define PR_PMLEN_MASK			(0x7fUL << PR_PMLEN_SHIFT) | 
|---|
| 262 |  | 
|---|
| 263 | /* Control reclaim behavior when allocating memory */ | 
|---|
| 264 | #define PR_SET_IO_FLUSHER		57 | 
|---|
| 265 | #define PR_GET_IO_FLUSHER		58 | 
|---|
| 266 |  | 
|---|
| 267 | /* Dispatch syscalls to a userspace handler */ | 
|---|
| 268 | #define PR_SET_SYSCALL_USER_DISPATCH	59 | 
|---|
| 269 | # define PR_SYS_DISPATCH_OFF		0 | 
|---|
| 270 | /* Enable dispatch except for the specified range */ | 
|---|
| 271 | # define PR_SYS_DISPATCH_EXCLUSIVE_ON	1 | 
|---|
| 272 | /* Enable dispatch for the specified range */ | 
|---|
| 273 | # define PR_SYS_DISPATCH_INCLUSIVE_ON	2 | 
|---|
| 274 | /* Legacy name for backwards compatibility */ | 
|---|
| 275 | # define PR_SYS_DISPATCH_ON		PR_SYS_DISPATCH_EXCLUSIVE_ON | 
|---|
| 276 | /* The control values for the user space selector when dispatch is enabled */ | 
|---|
| 277 | # define SYSCALL_DISPATCH_FILTER_ALLOW	0 | 
|---|
| 278 | # define SYSCALL_DISPATCH_FILTER_BLOCK	1 | 
|---|
| 279 |  | 
|---|
| 280 | /* Set/get enabled arm64 pointer authentication keys */ | 
|---|
| 281 | #define PR_PAC_SET_ENABLED_KEYS		60 | 
|---|
| 282 | #define PR_PAC_GET_ENABLED_KEYS		61 | 
|---|
| 283 |  | 
|---|
| 284 | /* Request the scheduler to share a core */ | 
|---|
| 285 | #define PR_SCHED_CORE			62 | 
|---|
| 286 | # define PR_SCHED_CORE_GET		0 | 
|---|
| 287 | # define PR_SCHED_CORE_CREATE		1 /* create unique core_sched cookie */ | 
|---|
| 288 | # define PR_SCHED_CORE_SHARE_TO		2 /* push core_sched cookie to pid */ | 
|---|
| 289 | # define PR_SCHED_CORE_SHARE_FROM	3 /* pull core_sched cookie to pid */ | 
|---|
| 290 | # define PR_SCHED_CORE_MAX		4 | 
|---|
| 291 | # define PR_SCHED_CORE_SCOPE_THREAD		0 | 
|---|
| 292 | # define PR_SCHED_CORE_SCOPE_THREAD_GROUP	1 | 
|---|
| 293 | # define PR_SCHED_CORE_SCOPE_PROCESS_GROUP	2 | 
|---|
| 294 |  | 
|---|
| 295 | /* arm64 Scalable Matrix Extension controls */ | 
|---|
| 296 | /* Flag values must be in sync with SVE versions */ | 
|---|
| 297 | #define PR_SME_SET_VL			63	/* set task vector length */ | 
|---|
| 298 | # define PR_SME_SET_VL_ONEXEC		(1 << 18) /* defer effect until exec */ | 
|---|
| 299 | #define PR_SME_GET_VL			64	/* get task vector length */ | 
|---|
| 300 | /* Bits common to PR_SME_SET_VL and PR_SME_GET_VL */ | 
|---|
| 301 | # define PR_SME_VL_LEN_MASK		0xffff | 
|---|
| 302 | # define PR_SME_VL_INHERIT		(1 << 17) /* inherit across exec */ | 
|---|
| 303 |  | 
|---|
| 304 | /* Memory deny write / execute */ | 
|---|
| 305 | #define PR_SET_MDWE			65 | 
|---|
| 306 | # define PR_MDWE_REFUSE_EXEC_GAIN	(1UL << 0) | 
|---|
| 307 | # define PR_MDWE_NO_INHERIT		(1UL << 1) | 
|---|
| 308 |  | 
|---|
| 309 | #define PR_GET_MDWE			66 | 
|---|
| 310 |  | 
|---|
| 311 | #define PR_SET_VMA		0x53564d41 | 
|---|
| 312 | # define PR_SET_VMA_ANON_NAME		0 | 
|---|
| 313 |  | 
|---|
| 314 | #define PR_GET_AUXV			0x41555856 | 
|---|
| 315 |  | 
|---|
| 316 | #define PR_SET_MEMORY_MERGE		67 | 
|---|
| 317 | #define PR_GET_MEMORY_MERGE		68 | 
|---|
| 318 |  | 
|---|
| 319 | #define PR_RISCV_V_SET_CONTROL		69 | 
|---|
| 320 | #define PR_RISCV_V_GET_CONTROL		70 | 
|---|
| 321 | # define PR_RISCV_V_VSTATE_CTRL_DEFAULT		0 | 
|---|
| 322 | # define PR_RISCV_V_VSTATE_CTRL_OFF		1 | 
|---|
| 323 | # define PR_RISCV_V_VSTATE_CTRL_ON		2 | 
|---|
| 324 | # define PR_RISCV_V_VSTATE_CTRL_INHERIT		(1 << 4) | 
|---|
| 325 | # define PR_RISCV_V_VSTATE_CTRL_CUR_MASK	0x3 | 
|---|
| 326 | # define PR_RISCV_V_VSTATE_CTRL_NEXT_MASK	0xc | 
|---|
| 327 | # define PR_RISCV_V_VSTATE_CTRL_MASK		0x1f | 
|---|
| 328 |  | 
|---|
| 329 | #define PR_RISCV_SET_ICACHE_FLUSH_CTX	71 | 
|---|
| 330 | # define PR_RISCV_CTX_SW_FENCEI_ON	0 | 
|---|
| 331 | # define PR_RISCV_CTX_SW_FENCEI_OFF	1 | 
|---|
| 332 | # define PR_RISCV_SCOPE_PER_PROCESS	0 | 
|---|
| 333 | # define PR_RISCV_SCOPE_PER_THREAD	1 | 
|---|
| 334 |  | 
|---|
| 335 | /* PowerPC Dynamic Execution Control Register (DEXCR) controls */ | 
|---|
| 336 | #define PR_PPC_GET_DEXCR		72 | 
|---|
| 337 | #define PR_PPC_SET_DEXCR		73 | 
|---|
| 338 | /* DEXCR aspect to act on */ | 
|---|
| 339 | # define PR_PPC_DEXCR_SBHE		0 /* Speculative branch hint enable */ | 
|---|
| 340 | # define PR_PPC_DEXCR_IBRTPD		1 /* Indirect branch recurrent target prediction disable */ | 
|---|
| 341 | # define PR_PPC_DEXCR_SRAPD		2 /* Subroutine return address prediction disable */ | 
|---|
| 342 | # define PR_PPC_DEXCR_NPHIE		3 /* Non-privileged hash instruction enable */ | 
|---|
| 343 | /* Action to apply / return */ | 
|---|
| 344 | # define PR_PPC_DEXCR_CTRL_EDITABLE	 0x1 /* Aspect can be modified with PR_PPC_SET_DEXCR */ | 
|---|
| 345 | # define PR_PPC_DEXCR_CTRL_SET		 0x2 /* Set the aspect for this process */ | 
|---|
| 346 | # define PR_PPC_DEXCR_CTRL_CLEAR	 0x4 /* Clear the aspect for this process */ | 
|---|
| 347 | # define PR_PPC_DEXCR_CTRL_SET_ONEXEC	 0x8 /* Set the aspect on exec */ | 
|---|
| 348 | # define PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC	0x10 /* Clear the aspect on exec */ | 
|---|
| 349 | # define PR_PPC_DEXCR_CTRL_MASK		0x1f | 
|---|
| 350 |  | 
|---|
| 351 | /* | 
|---|
| 352 | * Get the current shadow stack configuration for the current thread, | 
|---|
| 353 | * this will be the value configured via PR_SET_SHADOW_STACK_STATUS. | 
|---|
| 354 | */ | 
|---|
| 355 | #define PR_GET_SHADOW_STACK_STATUS      74 | 
|---|
| 356 |  | 
|---|
| 357 | /* | 
|---|
| 358 | * Set the current shadow stack configuration.  Enabling the shadow | 
|---|
| 359 | * stack will cause a shadow stack to be allocated for the thread. | 
|---|
| 360 | */ | 
|---|
| 361 | #define PR_SET_SHADOW_STACK_STATUS      75 | 
|---|
| 362 | # define PR_SHADOW_STACK_ENABLE         (1UL << 0) | 
|---|
| 363 | # define PR_SHADOW_STACK_WRITE		(1UL << 1) | 
|---|
| 364 | # define PR_SHADOW_STACK_PUSH		(1UL << 2) | 
|---|
| 365 |  | 
|---|
| 366 | /* | 
|---|
| 367 | * Prevent further changes to the specified shadow stack | 
|---|
| 368 | * configuration.  All bits may be locked via this call, including | 
|---|
| 369 | * undefined bits. | 
|---|
| 370 | */ | 
|---|
| 371 | #define PR_LOCK_SHADOW_STACK_STATUS      76 | 
|---|
| 372 |  | 
|---|
| 373 | /* | 
|---|
| 374 | * Controls the mode of timer_create() for CRIU restore operations. | 
|---|
| 375 | * Enabling this allows CRIU to restore timers with explicit IDs. | 
|---|
| 376 | * | 
|---|
| 377 | * Don't use for normal operations as the result might be undefined. | 
|---|
| 378 | */ | 
|---|
| 379 | #define PR_TIMER_CREATE_RESTORE_IDS		77 | 
|---|
| 380 | # define PR_TIMER_CREATE_RESTORE_IDS_OFF	0 | 
|---|
| 381 | # define PR_TIMER_CREATE_RESTORE_IDS_ON		1 | 
|---|
| 382 | # define PR_TIMER_CREATE_RESTORE_IDS_GET	2 | 
|---|
| 383 |  | 
|---|
| 384 | /* FUTEX hash management */ | 
|---|
| 385 | #define PR_FUTEX_HASH			78 | 
|---|
| 386 | # define PR_FUTEX_HASH_SET_SLOTS	1 | 
|---|
| 387 | # define PR_FUTEX_HASH_GET_SLOTS	2 | 
|---|
| 388 |  | 
|---|
| 389 | #endif /* _LINUX_PRCTL_H */ | 
|---|
| 390 |  | 
|---|