1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPI_LINUX_PTRACE_H 3*f80ad8b4SAndroid Build Coastguard Worker #define _UAPI_LINUX_PTRACE_H 4*f80ad8b4SAndroid Build Coastguard Worker /* ptrace.h */ 5*f80ad8b4SAndroid Build Coastguard Worker /* structs and defines to help the user use the ptrace system call. */ 6*f80ad8b4SAndroid Build Coastguard Worker 7*f80ad8b4SAndroid Build Coastguard Worker /* has the defines to get at the registers. */ 8*f80ad8b4SAndroid Build Coastguard Worker 9*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h> 10*f80ad8b4SAndroid Build Coastguard Worker 11*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_TRACEME 0 12*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_PEEKTEXT 1 13*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_PEEKDATA 2 14*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_PEEKUSR 3 15*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_POKETEXT 4 16*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_POKEDATA 5 17*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_POKEUSR 6 18*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_CONT 7 19*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_KILL 8 20*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_SINGLESTEP 9 21*f80ad8b4SAndroid Build Coastguard Worker 22*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_ATTACH 16 23*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_DETACH 17 24*f80ad8b4SAndroid Build Coastguard Worker 25*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_SYSCALL 24 26*f80ad8b4SAndroid Build Coastguard Worker 27*f80ad8b4SAndroid Build Coastguard Worker /* 0x4200-0x4300 are reserved for architecture-independent additions. */ 28*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_SETOPTIONS 0x4200 29*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_GETEVENTMSG 0x4201 30*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_GETSIGINFO 0x4202 31*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_SETSIGINFO 0x4203 32*f80ad8b4SAndroid Build Coastguard Worker 33*f80ad8b4SAndroid Build Coastguard Worker /* 34*f80ad8b4SAndroid Build Coastguard Worker * Generic ptrace interface that exports the architecture specific regsets 35*f80ad8b4SAndroid Build Coastguard Worker * using the corresponding NT_* types (which are also used in the core dump). 36*f80ad8b4SAndroid Build Coastguard Worker * Please note that the NT_PRSTATUS note type in a core dump contains a full 37*f80ad8b4SAndroid Build Coastguard Worker * 'struct elf_prstatus'. But the user_regset for NT_PRSTATUS contains just the 38*f80ad8b4SAndroid Build Coastguard Worker * elf_gregset_t that is the pr_reg field of 'struct elf_prstatus'. For all the 39*f80ad8b4SAndroid Build Coastguard Worker * other user_regset flavors, the user_regset layout and the ELF core dump note 40*f80ad8b4SAndroid Build Coastguard Worker * payload are exactly the same layout. 41*f80ad8b4SAndroid Build Coastguard Worker * 42*f80ad8b4SAndroid Build Coastguard Worker * This interface usage is as follows: 43*f80ad8b4SAndroid Build Coastguard Worker * struct iovec iov = { buf, len}; 44*f80ad8b4SAndroid Build Coastguard Worker * 45*f80ad8b4SAndroid Build Coastguard Worker * ret = ptrace(PTRACE_GETREGSET/PTRACE_SETREGSET, pid, NT_XXX_TYPE, &iov); 46*f80ad8b4SAndroid Build Coastguard Worker * 47*f80ad8b4SAndroid Build Coastguard Worker * On the successful completion, iov.len will be updated by the kernel, 48*f80ad8b4SAndroid Build Coastguard Worker * specifying how much the kernel has written/read to/from the user's iov.buf. 49*f80ad8b4SAndroid Build Coastguard Worker */ 50*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_GETREGSET 0x4204 51*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_SETREGSET 0x4205 52*f80ad8b4SAndroid Build Coastguard Worker 53*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_SEIZE 0x4206 54*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_INTERRUPT 0x4207 55*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_LISTEN 0x4208 56*f80ad8b4SAndroid Build Coastguard Worker 57*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_PEEKSIGINFO 0x4209 58*f80ad8b4SAndroid Build Coastguard Worker 59*f80ad8b4SAndroid Build Coastguard Worker struct ptrace_peeksiginfo_args { 60*f80ad8b4SAndroid Build Coastguard Worker __u64 off; /* from which siginfo to start */ 61*f80ad8b4SAndroid Build Coastguard Worker __u32 flags; 62*f80ad8b4SAndroid Build Coastguard Worker __s32 nr; /* how may siginfos to take */ 63*f80ad8b4SAndroid Build Coastguard Worker }; 64*f80ad8b4SAndroid Build Coastguard Worker 65*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_GETSIGMASK 0x420a 66*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_SETSIGMASK 0x420b 67*f80ad8b4SAndroid Build Coastguard Worker 68*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_SECCOMP_GET_FILTER 0x420c 69*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_SECCOMP_GET_METADATA 0x420d 70*f80ad8b4SAndroid Build Coastguard Worker 71*f80ad8b4SAndroid Build Coastguard Worker struct seccomp_metadata { 72*f80ad8b4SAndroid Build Coastguard Worker __u64 filter_off; /* Input: which filter */ 73*f80ad8b4SAndroid Build Coastguard Worker __u64 flags; /* Output: filter's flags */ 74*f80ad8b4SAndroid Build Coastguard Worker }; 75*f80ad8b4SAndroid Build Coastguard Worker 76*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_GET_SYSCALL_INFO 0x420e 77*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_SYSCALL_INFO_NONE 0 78*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_SYSCALL_INFO_ENTRY 1 79*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_SYSCALL_INFO_EXIT 2 80*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_SYSCALL_INFO_SECCOMP 3 81*f80ad8b4SAndroid Build Coastguard Worker 82*f80ad8b4SAndroid Build Coastguard Worker struct ptrace_syscall_info { 83*f80ad8b4SAndroid Build Coastguard Worker __u8 op; /* PTRACE_SYSCALL_INFO_* */ 84*f80ad8b4SAndroid Build Coastguard Worker __u8 pad[3]; 85*f80ad8b4SAndroid Build Coastguard Worker __u32 arch; 86*f80ad8b4SAndroid Build Coastguard Worker __u64 instruction_pointer; 87*f80ad8b4SAndroid Build Coastguard Worker __u64 stack_pointer; 88*f80ad8b4SAndroid Build Coastguard Worker union { 89*f80ad8b4SAndroid Build Coastguard Worker struct { 90*f80ad8b4SAndroid Build Coastguard Worker __u64 nr; 91*f80ad8b4SAndroid Build Coastguard Worker __u64 args[6]; 92*f80ad8b4SAndroid Build Coastguard Worker } entry; 93*f80ad8b4SAndroid Build Coastguard Worker struct { 94*f80ad8b4SAndroid Build Coastguard Worker __s64 rval; 95*f80ad8b4SAndroid Build Coastguard Worker __u8 is_error; 96*f80ad8b4SAndroid Build Coastguard Worker } exit; 97*f80ad8b4SAndroid Build Coastguard Worker struct { 98*f80ad8b4SAndroid Build Coastguard Worker __u64 nr; 99*f80ad8b4SAndroid Build Coastguard Worker __u64 args[6]; 100*f80ad8b4SAndroid Build Coastguard Worker __u32 ret_data; 101*f80ad8b4SAndroid Build Coastguard Worker } seccomp; 102*f80ad8b4SAndroid Build Coastguard Worker }; 103*f80ad8b4SAndroid Build Coastguard Worker }; 104*f80ad8b4SAndroid Build Coastguard Worker 105*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_GET_RSEQ_CONFIGURATION 0x420f 106*f80ad8b4SAndroid Build Coastguard Worker 107*f80ad8b4SAndroid Build Coastguard Worker struct ptrace_rseq_configuration { 108*f80ad8b4SAndroid Build Coastguard Worker __u64 rseq_abi_pointer; 109*f80ad8b4SAndroid Build Coastguard Worker __u32 rseq_abi_size; 110*f80ad8b4SAndroid Build Coastguard Worker __u32 signature; 111*f80ad8b4SAndroid Build Coastguard Worker __u32 flags; 112*f80ad8b4SAndroid Build Coastguard Worker __u32 pad; 113*f80ad8b4SAndroid Build Coastguard Worker }; 114*f80ad8b4SAndroid Build Coastguard Worker 115*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG 0x4210 116*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG 0x4211 117*f80ad8b4SAndroid Build Coastguard Worker 118*f80ad8b4SAndroid Build Coastguard Worker /* 119*f80ad8b4SAndroid Build Coastguard Worker * struct ptrace_sud_config - Per-task configuration for Syscall User Dispatch 120*f80ad8b4SAndroid Build Coastguard Worker * @mode: One of PR_SYS_DISPATCH_ON or PR_SYS_DISPATCH_OFF 121*f80ad8b4SAndroid Build Coastguard Worker * @selector: Tracees user virtual address of SUD selector 122*f80ad8b4SAndroid Build Coastguard Worker * @offset: SUD exclusion area (virtual address) 123*f80ad8b4SAndroid Build Coastguard Worker * @len: Length of SUD exclusion area 124*f80ad8b4SAndroid Build Coastguard Worker * 125*f80ad8b4SAndroid Build Coastguard Worker * Used to get/set the syscall user dispatch configuration for a tracee. 126*f80ad8b4SAndroid Build Coastguard Worker * Selector is optional (may be NULL), and if invalid will produce 127*f80ad8b4SAndroid Build Coastguard Worker * a SIGSEGV in the tracee upon first access. 128*f80ad8b4SAndroid Build Coastguard Worker * 129*f80ad8b4SAndroid Build Coastguard Worker * If mode is PR_SYS_DISPATCH_ON, syscall dispatch will be enabled. If 130*f80ad8b4SAndroid Build Coastguard Worker * PR_SYS_DISPATCH_OFF, syscall dispatch will be disabled and all other 131*f80ad8b4SAndroid Build Coastguard Worker * parameters must be 0. The value in *selector (if not null), also determines 132*f80ad8b4SAndroid Build Coastguard Worker * whether syscall dispatch will occur. 133*f80ad8b4SAndroid Build Coastguard Worker * 134*f80ad8b4SAndroid Build Coastguard Worker * The Syscall User Dispatch Exclusion area described by offset/len is the 135*f80ad8b4SAndroid Build Coastguard Worker * virtual address space from which syscalls will not produce a user 136*f80ad8b4SAndroid Build Coastguard Worker * dispatch. 137*f80ad8b4SAndroid Build Coastguard Worker */ 138*f80ad8b4SAndroid Build Coastguard Worker struct ptrace_sud_config { 139*f80ad8b4SAndroid Build Coastguard Worker __u64 mode; 140*f80ad8b4SAndroid Build Coastguard Worker __u64 selector; 141*f80ad8b4SAndroid Build Coastguard Worker __u64 offset; 142*f80ad8b4SAndroid Build Coastguard Worker __u64 len; 143*f80ad8b4SAndroid Build Coastguard Worker }; 144*f80ad8b4SAndroid Build Coastguard Worker 145*f80ad8b4SAndroid Build Coastguard Worker /* 146*f80ad8b4SAndroid Build Coastguard Worker * These values are stored in task->ptrace_message 147*f80ad8b4SAndroid Build Coastguard Worker * by ptrace_stop to describe the current syscall-stop. 148*f80ad8b4SAndroid Build Coastguard Worker */ 149*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_EVENTMSG_SYSCALL_ENTRY 1 150*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_EVENTMSG_SYSCALL_EXIT 2 151*f80ad8b4SAndroid Build Coastguard Worker 152*f80ad8b4SAndroid Build Coastguard Worker /* Read signals from a shared (process wide) queue */ 153*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_PEEKSIGINFO_SHARED (1 << 0) 154*f80ad8b4SAndroid Build Coastguard Worker 155*f80ad8b4SAndroid Build Coastguard Worker /* Wait extended result codes for the above trace options. */ 156*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_EVENT_FORK 1 157*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_EVENT_VFORK 2 158*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_EVENT_CLONE 3 159*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_EVENT_EXEC 4 160*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_EVENT_VFORK_DONE 5 161*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_EVENT_EXIT 6 162*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_EVENT_SECCOMP 7 163*f80ad8b4SAndroid Build Coastguard Worker /* Extended result codes which enabled by means other than options. */ 164*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_EVENT_STOP 128 165*f80ad8b4SAndroid Build Coastguard Worker 166*f80ad8b4SAndroid Build Coastguard Worker /* Options set using PTRACE_SETOPTIONS or using PTRACE_SEIZE @data param */ 167*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_O_TRACESYSGOOD 1 168*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_O_TRACEFORK (1 << PTRACE_EVENT_FORK) 169*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_O_TRACEVFORK (1 << PTRACE_EVENT_VFORK) 170*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_O_TRACECLONE (1 << PTRACE_EVENT_CLONE) 171*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_O_TRACEEXEC (1 << PTRACE_EVENT_EXEC) 172*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_O_TRACEVFORKDONE (1 << PTRACE_EVENT_VFORK_DONE) 173*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_O_TRACEEXIT (1 << PTRACE_EVENT_EXIT) 174*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_O_TRACESECCOMP (1 << PTRACE_EVENT_SECCOMP) 175*f80ad8b4SAndroid Build Coastguard Worker 176*f80ad8b4SAndroid Build Coastguard Worker /* eventless options */ 177*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_O_EXITKILL (1 << 20) 178*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_O_SUSPEND_SECCOMP (1 << 21) 179*f80ad8b4SAndroid Build Coastguard Worker 180*f80ad8b4SAndroid Build Coastguard Worker #define PTRACE_O_MASK (\ 181*f80ad8b4SAndroid Build Coastguard Worker 0x000000ff | PTRACE_O_EXITKILL | PTRACE_O_SUSPEND_SECCOMP) 182*f80ad8b4SAndroid Build Coastguard Worker 183*f80ad8b4SAndroid Build Coastguard Worker #include <asm/ptrace.h> 184*f80ad8b4SAndroid Build Coastguard Worker 185*f80ad8b4SAndroid Build Coastguard Worker 186*f80ad8b4SAndroid Build Coastguard Worker #endif /* _UAPI_LINUX_PTRACE_H */ 187