ptrace.h (17368B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _LINUX_PTRACE_H 3#define _LINUX_PTRACE_H 4 5#include <linux/compiler.h> /* For unlikely. */ 6#include <linux/sched.h> /* For struct task_struct. */ 7#include <linux/sched/signal.h> /* For send_sig(), same_thread_group(), etc. */ 8#include <linux/err.h> /* for IS_ERR_VALUE */ 9#include <linux/bug.h> /* For BUG_ON. */ 10#include <linux/pid_namespace.h> /* For task_active_pid_ns. */ 11#include <uapi/linux/ptrace.h> 12#include <linux/seccomp.h> 13 14/* Add sp to seccomp_data, as seccomp is user API, we don't want to modify it */ 15struct syscall_info { 16 __u64 sp; 17 struct seccomp_data data; 18}; 19 20extern int ptrace_access_vm(struct task_struct *tsk, unsigned long addr, 21 void *buf, int len, unsigned int gup_flags); 22 23/* 24 * Ptrace flags 25 * 26 * The owner ship rules for task->ptrace which holds the ptrace 27 * flags is simple. When a task is running it owns it's task->ptrace 28 * flags. When the a task is stopped the ptracer owns task->ptrace. 29 */ 30 31#define PT_SEIZED 0x00010000 /* SEIZE used, enable new behavior */ 32#define PT_PTRACED 0x00000001 33 34#define PT_OPT_FLAG_SHIFT 3 35/* PT_TRACE_* event enable flags */ 36#define PT_EVENT_FLAG(event) (1 << (PT_OPT_FLAG_SHIFT + (event))) 37#define PT_TRACESYSGOOD PT_EVENT_FLAG(0) 38#define PT_TRACE_FORK PT_EVENT_FLAG(PTRACE_EVENT_FORK) 39#define PT_TRACE_VFORK PT_EVENT_FLAG(PTRACE_EVENT_VFORK) 40#define PT_TRACE_CLONE PT_EVENT_FLAG(PTRACE_EVENT_CLONE) 41#define PT_TRACE_EXEC PT_EVENT_FLAG(PTRACE_EVENT_EXEC) 42#define PT_TRACE_VFORK_DONE PT_EVENT_FLAG(PTRACE_EVENT_VFORK_DONE) 43#define PT_TRACE_EXIT PT_EVENT_FLAG(PTRACE_EVENT_EXIT) 44#define PT_TRACE_SECCOMP PT_EVENT_FLAG(PTRACE_EVENT_SECCOMP) 45 46#define PT_EXITKILL (PTRACE_O_EXITKILL << PT_OPT_FLAG_SHIFT) 47#define PT_SUSPEND_SECCOMP (PTRACE_O_SUSPEND_SECCOMP << PT_OPT_FLAG_SHIFT) 48 49extern long arch_ptrace(struct task_struct *child, long request, 50 unsigned long addr, unsigned long data); 51extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len); 52extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len); 53extern void ptrace_disable(struct task_struct *); 54extern int ptrace_request(struct task_struct *child, long request, 55 unsigned long addr, unsigned long data); 56extern int ptrace_notify(int exit_code, unsigned long message); 57extern void __ptrace_link(struct task_struct *child, 58 struct task_struct *new_parent, 59 const struct cred *ptracer_cred); 60extern void __ptrace_unlink(struct task_struct *child); 61extern void exit_ptrace(struct task_struct *tracer, struct list_head *dead); 62#define PTRACE_MODE_READ 0x01 63#define PTRACE_MODE_ATTACH 0x02 64#define PTRACE_MODE_NOAUDIT 0x04 65#define PTRACE_MODE_FSCREDS 0x08 66#define PTRACE_MODE_REALCREDS 0x10 67 68/* shorthands for READ/ATTACH and FSCREDS/REALCREDS combinations */ 69#define PTRACE_MODE_READ_FSCREDS (PTRACE_MODE_READ | PTRACE_MODE_FSCREDS) 70#define PTRACE_MODE_READ_REALCREDS (PTRACE_MODE_READ | PTRACE_MODE_REALCREDS) 71#define PTRACE_MODE_ATTACH_FSCREDS (PTRACE_MODE_ATTACH | PTRACE_MODE_FSCREDS) 72#define PTRACE_MODE_ATTACH_REALCREDS (PTRACE_MODE_ATTACH | PTRACE_MODE_REALCREDS) 73 74/** 75 * ptrace_may_access - check whether the caller is permitted to access 76 * a target task. 77 * @task: target task 78 * @mode: selects type of access and caller credentials 79 * 80 * Returns true on success, false on denial. 81 * 82 * One of the flags PTRACE_MODE_FSCREDS and PTRACE_MODE_REALCREDS must 83 * be set in @mode to specify whether the access was requested through 84 * a filesystem syscall (should use effective capabilities and fsuid 85 * of the caller) or through an explicit syscall such as 86 * process_vm_writev or ptrace (and should use the real credentials). 87 */ 88extern bool ptrace_may_access(struct task_struct *task, unsigned int mode); 89 90static inline int ptrace_reparented(struct task_struct *child) 91{ 92 return !same_thread_group(child->real_parent, child->parent); 93} 94 95static inline void ptrace_unlink(struct task_struct *child) 96{ 97 if (unlikely(child->ptrace)) 98 __ptrace_unlink(child); 99} 100 101int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr, 102 unsigned long data); 103int generic_ptrace_pokedata(struct task_struct *tsk, unsigned long addr, 104 unsigned long data); 105 106/** 107 * ptrace_parent - return the task that is tracing the given task 108 * @task: task to consider 109 * 110 * Returns %NULL if no one is tracing @task, or the &struct task_struct 111 * pointer to its tracer. 112 * 113 * Must called under rcu_read_lock(). The pointer returned might be kept 114 * live only by RCU. During exec, this may be called with task_lock() held 115 * on @task, still held from when check_unsafe_exec() was called. 116 */ 117static inline struct task_struct *ptrace_parent(struct task_struct *task) 118{ 119 if (unlikely(task->ptrace)) 120 return rcu_dereference(task->parent); 121 return NULL; 122} 123 124/** 125 * ptrace_event_enabled - test whether a ptrace event is enabled 126 * @task: ptracee of interest 127 * @event: %PTRACE_EVENT_* to test 128 * 129 * Test whether @event is enabled for ptracee @task. 130 * 131 * Returns %true if @event is enabled, %false otherwise. 132 */ 133static inline bool ptrace_event_enabled(struct task_struct *task, int event) 134{ 135 return task->ptrace & PT_EVENT_FLAG(event); 136} 137 138/** 139 * ptrace_event - possibly stop for a ptrace event notification 140 * @event: %PTRACE_EVENT_* value to report 141 * @message: value for %PTRACE_GETEVENTMSG to return 142 * 143 * Check whether @event is enabled and, if so, report @event and @message 144 * to the ptrace parent. 145 * 146 * Called without locks. 147 */ 148static inline void ptrace_event(int event, unsigned long message) 149{ 150 if (unlikely(ptrace_event_enabled(current, event))) { 151 ptrace_notify((event << 8) | SIGTRAP, message); 152 } else if (event == PTRACE_EVENT_EXEC) { 153 /* legacy EXEC report via SIGTRAP */ 154 if ((current->ptrace & (PT_PTRACED|PT_SEIZED)) == PT_PTRACED) 155 send_sig(SIGTRAP, current, 0); 156 } 157} 158 159/** 160 * ptrace_event_pid - possibly stop for a ptrace event notification 161 * @event: %PTRACE_EVENT_* value to report 162 * @pid: process identifier for %PTRACE_GETEVENTMSG to return 163 * 164 * Check whether @event is enabled and, if so, report @event and @pid 165 * to the ptrace parent. @pid is reported as the pid_t seen from the 166 * ptrace parent's pid namespace. 167 * 168 * Called without locks. 169 */ 170static inline void ptrace_event_pid(int event, struct pid *pid) 171{ 172 /* 173 * FIXME: There's a potential race if a ptracer in a different pid 174 * namespace than parent attaches between computing message below and 175 * when we acquire tasklist_lock in ptrace_stop(). If this happens, 176 * the ptracer will get a bogus pid from PTRACE_GETEVENTMSG. 177 */ 178 unsigned long message = 0; 179 struct pid_namespace *ns; 180 181 rcu_read_lock(); 182 ns = task_active_pid_ns(rcu_dereference(current->parent)); 183 if (ns) 184 message = pid_nr_ns(pid, ns); 185 rcu_read_unlock(); 186 187 ptrace_event(event, message); 188} 189 190/** 191 * ptrace_init_task - initialize ptrace state for a new child 192 * @child: new child task 193 * @ptrace: true if child should be ptrace'd by parent's tracer 194 * 195 * This is called immediately after adding @child to its parent's children 196 * list. @ptrace is false in the normal case, and true to ptrace @child. 197 * 198 * Called with current's siglock and write_lock_irq(&tasklist_lock) held. 199 */ 200static inline void ptrace_init_task(struct task_struct *child, bool ptrace) 201{ 202 INIT_LIST_HEAD(&child->ptrace_entry); 203 INIT_LIST_HEAD(&child->ptraced); 204 child->jobctl = 0; 205 child->ptrace = 0; 206 child->parent = child->real_parent; 207 208 if (unlikely(ptrace) && current->ptrace) { 209 child->ptrace = current->ptrace; 210 __ptrace_link(child, current->parent, current->ptracer_cred); 211 212 if (child->ptrace & PT_SEIZED) 213 task_set_jobctl_pending(child, JOBCTL_TRAP_STOP); 214 else 215 sigaddset(&child->pending.signal, SIGSTOP); 216 } 217 else 218 child->ptracer_cred = NULL; 219} 220 221/** 222 * ptrace_release_task - final ptrace-related cleanup of a zombie being reaped 223 * @task: task in %EXIT_DEAD state 224 * 225 * Called with write_lock(&tasklist_lock) held. 226 */ 227static inline void ptrace_release_task(struct task_struct *task) 228{ 229 BUG_ON(!list_empty(&task->ptraced)); 230 ptrace_unlink(task); 231 BUG_ON(!list_empty(&task->ptrace_entry)); 232} 233 234#ifndef force_successful_syscall_return 235/* 236 * System call handlers that, upon successful completion, need to return a 237 * negative value should call force_successful_syscall_return() right before 238 * returning. On architectures where the syscall convention provides for a 239 * separate error flag (e.g., alpha, ia64, ppc{,64}, sparc{,64}, possibly 240 * others), this macro can be used to ensure that the error flag will not get 241 * set. On architectures which do not support a separate error flag, the macro 242 * is a no-op and the spurious error condition needs to be filtered out by some 243 * other means (e.g., in user-level, by passing an extra argument to the 244 * syscall handler, or something along those lines). 245 */ 246#define force_successful_syscall_return() do { } while (0) 247#endif 248 249#ifndef is_syscall_success 250/* 251 * On most systems we can tell if a syscall is a success based on if the retval 252 * is an error value. On some systems like ia64 and powerpc they have different 253 * indicators of success/failure and must define their own. 254 */ 255#define is_syscall_success(regs) (!IS_ERR_VALUE((unsigned long)(regs_return_value(regs)))) 256#endif 257 258/* 259 * <asm/ptrace.h> should define the following things inside #ifdef __KERNEL__. 260 * 261 * These do-nothing inlines are used when the arch does not 262 * implement single-step. The kerneldoc comments are here 263 * to document the interface for all arch definitions. 264 */ 265 266#ifndef arch_has_single_step 267/** 268 * arch_has_single_step - does this CPU support user-mode single-step? 269 * 270 * If this is defined, then there must be function declarations or 271 * inlines for user_enable_single_step() and user_disable_single_step(). 272 * arch_has_single_step() should evaluate to nonzero iff the machine 273 * supports instruction single-step for user mode. 274 * It can be a constant or it can test a CPU feature bit. 275 */ 276#define arch_has_single_step() (0) 277 278/** 279 * user_enable_single_step - single-step in user-mode task 280 * @task: either current or a task stopped in %TASK_TRACED 281 * 282 * This can only be called when arch_has_single_step() has returned nonzero. 283 * Set @task so that when it returns to user mode, it will trap after the 284 * next single instruction executes. If arch_has_block_step() is defined, 285 * this must clear the effects of user_enable_block_step() too. 286 */ 287static inline void user_enable_single_step(struct task_struct *task) 288{ 289 BUG(); /* This can never be called. */ 290} 291 292/** 293 * user_disable_single_step - cancel user-mode single-step 294 * @task: either current or a task stopped in %TASK_TRACED 295 * 296 * Clear @task of the effects of user_enable_single_step() and 297 * user_enable_block_step(). This can be called whether or not either 298 * of those was ever called on @task, and even if arch_has_single_step() 299 * returned zero. 300 */ 301static inline void user_disable_single_step(struct task_struct *task) 302{ 303} 304#else 305extern void user_enable_single_step(struct task_struct *); 306extern void user_disable_single_step(struct task_struct *); 307#endif /* arch_has_single_step */ 308 309#ifndef arch_has_block_step 310/** 311 * arch_has_block_step - does this CPU support user-mode block-step? 312 * 313 * If this is defined, then there must be a function declaration or inline 314 * for user_enable_block_step(), and arch_has_single_step() must be defined 315 * too. arch_has_block_step() should evaluate to nonzero iff the machine 316 * supports step-until-branch for user mode. It can be a constant or it 317 * can test a CPU feature bit. 318 */ 319#define arch_has_block_step() (0) 320 321/** 322 * user_enable_block_step - step until branch in user-mode task 323 * @task: either current or a task stopped in %TASK_TRACED 324 * 325 * This can only be called when arch_has_block_step() has returned nonzero, 326 * and will never be called when single-instruction stepping is being used. 327 * Set @task so that when it returns to user mode, it will trap after the 328 * next branch or trap taken. 329 */ 330static inline void user_enable_block_step(struct task_struct *task) 331{ 332 BUG(); /* This can never be called. */ 333} 334#else 335extern void user_enable_block_step(struct task_struct *); 336#endif /* arch_has_block_step */ 337 338#ifdef ARCH_HAS_USER_SINGLE_STEP_REPORT 339extern void user_single_step_report(struct pt_regs *regs); 340#else 341static inline void user_single_step_report(struct pt_regs *regs) 342{ 343 kernel_siginfo_t info; 344 clear_siginfo(&info); 345 info.si_signo = SIGTRAP; 346 info.si_errno = 0; 347 info.si_code = SI_USER; 348 info.si_pid = 0; 349 info.si_uid = 0; 350 force_sig_info(&info); 351} 352#endif 353 354#ifndef arch_ptrace_stop_needed 355/** 356 * arch_ptrace_stop_needed - Decide whether arch_ptrace_stop() should be called 357 * 358 * This is called with the siglock held, to decide whether or not it's 359 * necessary to release the siglock and call arch_ptrace_stop(). It can be 360 * defined to a constant if arch_ptrace_stop() is never required, or always 361 * is. On machines where this makes sense, it should be defined to a quick 362 * test to optimize out calling arch_ptrace_stop() when it would be 363 * superfluous. For example, if the thread has not been back to user mode 364 * since the last stop, the thread state might indicate that nothing needs 365 * to be done. 366 * 367 * This is guaranteed to be invoked once before a task stops for ptrace and 368 * may include arch-specific operations necessary prior to a ptrace stop. 369 */ 370#define arch_ptrace_stop_needed() (0) 371#endif 372 373#ifndef arch_ptrace_stop 374/** 375 * arch_ptrace_stop - Do machine-specific work before stopping for ptrace 376 * 377 * This is called with no locks held when arch_ptrace_stop_needed() has 378 * just returned nonzero. It is allowed to block, e.g. for user memory 379 * access. The arch can have machine-specific work to be done before 380 * ptrace stops. On ia64, register backing store gets written back to user 381 * memory here. Since this can be costly (requires dropping the siglock), 382 * we only do it when the arch requires it for this particular stop, as 383 * indicated by arch_ptrace_stop_needed(). 384 */ 385#define arch_ptrace_stop() do { } while (0) 386#endif 387 388#ifndef current_pt_regs 389#define current_pt_regs() task_pt_regs(current) 390#endif 391 392/* 393 * unlike current_pt_regs(), this one is equal to task_pt_regs(current) 394 * on *all* architectures; the only reason to have a per-arch definition 395 * is optimisation. 396 */ 397#ifndef signal_pt_regs 398#define signal_pt_regs() task_pt_regs(current) 399#endif 400 401#ifndef current_user_stack_pointer 402#define current_user_stack_pointer() user_stack_pointer(current_pt_regs()) 403#endif 404 405extern int task_current_syscall(struct task_struct *target, struct syscall_info *info); 406 407extern void sigaction_compat_abi(struct k_sigaction *act, struct k_sigaction *oact); 408 409/* 410 * ptrace report for syscall entry and exit looks identical. 411 */ 412static inline int ptrace_report_syscall(unsigned long message) 413{ 414 int ptrace = current->ptrace; 415 int signr; 416 417 if (!(ptrace & PT_PTRACED)) 418 return 0; 419 420 signr = ptrace_notify(SIGTRAP | ((ptrace & PT_TRACESYSGOOD) ? 0x80 : 0), 421 message); 422 423 /* 424 * this isn't the same as continuing with a signal, but it will do 425 * for normal use. strace only continues with a signal if the 426 * stopping signal is not SIGTRAP. -brl 427 */ 428 if (signr) 429 send_sig(signr, current, 1); 430 431 return fatal_signal_pending(current); 432} 433 434/** 435 * ptrace_report_syscall_entry - task is about to attempt a system call 436 * @regs: user register state of current task 437 * 438 * This will be called if %SYSCALL_WORK_SYSCALL_TRACE or 439 * %SYSCALL_WORK_SYSCALL_EMU have been set, when the current task has just 440 * entered the kernel for a system call. Full user register state is 441 * available here. Changing the values in @regs can affect the system 442 * call number and arguments to be tried. It is safe to block here, 443 * preventing the system call from beginning. 444 * 445 * Returns zero normally, or nonzero if the calling arch code should abort 446 * the system call. That must prevent normal entry so no system call is 447 * made. If @task ever returns to user mode after this, its register state 448 * is unspecified, but should be something harmless like an %ENOSYS error 449 * return. It should preserve enough information so that syscall_rollback() 450 * can work (see asm-generic/syscall.h). 451 * 452 * Called without locks, just after entering kernel mode. 453 */ 454static inline __must_check int ptrace_report_syscall_entry( 455 struct pt_regs *regs) 456{ 457 return ptrace_report_syscall(PTRACE_EVENTMSG_SYSCALL_ENTRY); 458} 459 460/** 461 * ptrace_report_syscall_exit - task has just finished a system call 462 * @regs: user register state of current task 463 * @step: nonzero if simulating single-step or block-step 464 * 465 * This will be called if %SYSCALL_WORK_SYSCALL_TRACE has been set, when 466 * the current task has just finished an attempted system call. Full 467 * user register state is available here. It is safe to block here, 468 * preventing signals from being processed. 469 * 470 * If @step is nonzero, this report is also in lieu of the normal 471 * trap that would follow the system call instruction because 472 * user_enable_block_step() or user_enable_single_step() was used. 473 * In this case, %SYSCALL_WORK_SYSCALL_TRACE might not be set. 474 * 475 * Called without locks, just before checking for pending signals. 476 */ 477static inline void ptrace_report_syscall_exit(struct pt_regs *regs, int step) 478{ 479 if (step) 480 user_single_step_report(regs); 481 else 482 ptrace_report_syscall(PTRACE_EVENTMSG_SYSCALL_EXIT); 483} 484#endif