]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/ptrace.2
atexit.3: wfix
[thirdparty/man-pages.git] / man2 / ptrace.2
CommitLineData
181f997f 1.\" Copyright (c) 1993 Michael Haardt <michael@moria.de>
fea681da
MK
2.\" Fri Apr 2 11:32:09 MET DST 1993
3.\"
181f997f 4.\" and changes Copyright (C) 1999 Mike Coleman (mkc@acm.org)
fea681da 5.\" -- major revision to fully document ptrace semantics per recent Linux
c13182ef 6.\" kernel (2.2.10) and glibc (2.1.2)
fea681da
MK
7.\" Sun Nov 7 03:18:35 CST 1999
8.\"
181f997f 9.\" and Copyright (c) 2011, Denys Vlasenko <vda.linux@googlemail.com>
b0459842 10.\" and Copyright (c) 2015, 2016, Michael Kerrisk <mtk.manpages@gmail.com>
181f997f 11.\"
1dd72f9c 12.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
fea681da
MK
13.\" This is free documentation; you can redistribute it and/or
14.\" modify it under the terms of the GNU General Public License as
15.\" published by the Free Software Foundation; either version 2 of
16.\" the License, or (at your option) any later version.
17.\"
18.\" The GNU General Public License's references to "object code"
19.\" and "executables" are to be interpreted as the output of any
20.\" document formatting or typesetting system, including
21.\" intermediate and printed output.
22.\"
23.\" This manual is distributed in the hope that it will be useful,
24.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
25.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26.\" GNU General Public License for more details.
27.\"
28.\" You should have received a copy of the GNU General Public
c715f741
MK
29.\" License along with this manual; if not, see
30.\" <http://www.gnu.org/licenses/>.
6a8d8745 31.\" %%%LICENSE_END
fea681da
MK
32.\"
33.\" Modified Fri Jul 23 23:47:18 1993 by Rik Faith <faith@cs.unc.edu>
34.\" Modified Fri Jan 31 16:46:30 1997 by Eric S. Raymond <esr@thyrsus.com>
35.\" Modified Thu Oct 7 17:28:49 1999 by Andries Brouwer <aeb@cwi.nl>
c11b1abf 36.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
fea681da
MK
37.\" Added notes on capability requirements
38.\"
44b35ee0
MK
39.\" 2006-03-24, Chuck Ebbert <76306.1226@compuserve.com>
40.\" Added PTRACE_SETOPTIONS, PTRACE_GETEVENTMSG, PTRACE_GETSIGINFO,
41.\" PTRACE_SETSIGINFO, PTRACE_SYSEMU, PTRACE_SYSEMU_SINGLESTEP
42.\" (Thanks to Blaisorblade, Daniel Jacobowitz and others who helped.)
181f997f 43.\" 2011-09, major update by Denys Vlasenko <vda.linux@googlemail.com>
3b4a59c4
KC
44.\" 2015-01, Kees Cook <keescook@chromium.org>
45.\" Added PTRACE_O_TRACESECCOMP, PTRACE_EVENT_SECCOMP
44b35ee0 46.\"
65ba6523
MK
47.\" FIXME The following are undocumented:
48.\"
02418dd0 49.\" PTRACE_GETWMMXREGS
65ba6523
MK
50.\" PTRACE_SETWMMXREGS
51.\" ARM
52.\" Linux 2.6.12
53.\"
54.\" PTRACE_SET_SYSCALL
55.\" ARM and ARM64
56.\" Linux 2.6.16
57.\" commit 3f471126ee53feb5e9b210ea2f525ed3bb9b7a7f
58.\" Author: Nicolas Pitre <nico@cam.org>
59.\" Date: Sat Jan 14 19:30:04 2006 +0000
60.\"
61.\" PTRACE_GETCRUNCHREGS
62.\" PTRACE_SETCRUNCHREGS
63.\" ARM
64.\" Linux 2.6.18
65.\" commit 3bec6ded282b331552587267d67a06ed7fd95ddd
66.\" Author: Lennert Buytenhek <buytenh@wantstofly.org>
67.\" Date: Tue Jun 27 22:56:18 2006 +0100
68.\"
69.\" PTRACE_GETVFPREGS
70.\" PTRACE_SETVFPREGS
71.\" ARM and ARM64
72.\" Linux 2.6.30
73.\" commit 3d1228ead618b88e8606015cbabc49019981805d
74.\" Author: Catalin Marinas <catalin.marinas@arm.com>
75.\" Date: Wed Feb 11 13:12:56 2009 +0100
76.\"
77.\" PTRACE_GETHBPREGS
78.\" PTRACE_SETHBPREGS
79.\" ARM and ARM64
80.\" Linux 2.6.37
81.\" commit 864232fa1a2f8dfe003438ef0851a56722740f3e
82.\" Author: Will Deacon <will.deacon@arm.com>
83.\" Date: Fri Sep 3 10:42:55 2010 +0100
84.\"
85.\" PTRACE_SINGLEBLOCK
c7391615 86.\" Since at least Linux 2.4.0 on various architectures
65ba6523
MK
87.\" Since Linux 2.6.25 on x86 (and others?)
88.\" commit 5b88abbf770a0e1975c668743100f42934f385e8
89.\" Author: Roland McGrath <roland@redhat.com>
90.\" Date: Wed Jan 30 13:30:53 2008 +0100
91.\" ptrace: generic PTRACE_SINGLEBLOCK
92.\"
93.\" PTRACE_GETFPXREGS
94.\" PTRACE_SETFPXREGS
c7391615 95.\" Since at least Linux 2.4.0 on various architectures
65ba6523 96.\"
65ba6523
MK
97.\" PTRACE_GETFDPIC
98.\" PTRACE_GETFDPIC_EXEC
99.\" PTRACE_GETFDPIC_INTERP
100.\" blackfin, c6x, frv, sh
101.\" First appearance in Linux 2.6.11 on frv
3b1fdaf3 102.\"
a47c1f44
MK
103.\" and others that can be found in the arch/*/include/uapi/asm/ptrace files
104.\"
4b8c67d9 105.TH PTRACE 2 2017-09-15 "Linux" "Linux Programmer's Manual"
fea681da
MK
106.SH NAME
107ptrace \- process trace
108.SH SYNOPSIS
44b35ee0 109.nf
fea681da 110.B #include <sys/ptrace.h>
68e4db0a 111.PP
44b35ee0
MK
112.BI "long ptrace(enum __ptrace_request " request ", pid_t " pid ", "
113.BI " void *" addr ", void *" data );
114.fi
fea681da
MK
115.SH DESCRIPTION
116The
e511ffb6 117.BR ptrace ()
181f997f
MK
118system call provides a means by which one process (the "tracer")
119may observe and control the execution of another process (the "tracee"),
120and examine and change the tracee's memory and registers.
e63ad01d 121It is primarily used to implement breakpoint debugging and system
fea681da 122call tracing.
dd3568a1 123.PP
8898a252 124A tracee first needs to be attached to the tracer.
181f997f
MK
125Attachment and subsequent commands are per thread:
126in a multithreaded process,
127every thread can be individually attached to a
128(potentially different) tracer,
129or left not attached and thus not debugged.
130Therefore, "tracee" always means "(one) thread",
131never "a (possibly multithreaded) process".
8b20acd1 132Ptrace commands are always sent to
181f997f 133a specific tracee using a call of the form
efeece04 134.PP
181f997f 135 ptrace(PTRACE_foo, pid, ...)
efeece04 136.PP
181f997f
MK
137where
138.I pid
139is the thread ID of the corresponding Linux thread.
dd3568a1 140.PP
8898a252
MK
141(Note that in this page, a "multithreaded process"
142means a thread group consisting of threads created using the
143.BR clone (2)
144.B CLONE_THREAD
145flag.)
dd3568a1 146.PP
181f997f 147A process can initiate a trace by calling
c13182ef 148.BR fork (2)
8bd58774
MK
149and having the resulting child do a
150.BR PTRACE_TRACEME ,
e63ad01d 151followed (typically) by an
4d12a715 152.BR execve (2).
181f997f 153Alternatively, one process may commence tracing another process using
ba8f446e
DV
154.B PTRACE_ATTACH
155or
156.BR PTRACE_SEIZE .
dd3568a1 157.PP
4d12a715 158While being traced, the tracee will stop each time a signal is delivered,
c13182ef 159even if the signal is being ignored.
181f997f 160(An exception is
8bd58774
MK
161.BR SIGKILL ,
162which has its usual effect.)
181f997f
MK
163The tracer will be notified at its next call to
164.BR waitpid (2)
8898a252
MK
165(or one of the related "wait" system calls); that call will return a
166.I status
167value containing information that indicates
168the cause of the stop in the tracee.
169While the tracee is stopped,
170the tracer can use various ptrace requests to inspect and modify the tracee.
4d12a715 171The tracer then causes the tracee to continue,
e63ad01d 172optionally ignoring the delivered signal
fea681da 173(or even delivering a different signal instead).
dd3568a1 174.PP
d39a9b98 175If the
b16ecdae
DV
176.B PTRACE_O_TRACEEXEC
177option is not in effect, all successful calls to
178.BR execve (2)
d39a9b98 179by the traced process will cause it to be sent a
b16ecdae 180.B SIGTRAP
d39a9b98 181signal,
b16ecdae
DV
182giving the parent a chance to gain control before the new program
183begins execution.
dd3568a1 184.PP
181f997f 185When the tracer is finished tracing, it can cause the tracee to continue
4d12a715 186executing in a normal, untraced mode via
8bd58774 187.BR PTRACE_DETACH .
dd3568a1 188.PP
181f997f
MK
189The value of
190.I request
191determines the action to be performed:
fea681da 192.TP
8bd58774 193.B PTRACE_TRACEME
181f997f 194Indicate that this process is to be traced by its parent.
c13182ef
MK
195A process probably shouldn't make this request if its parent
196isn't expecting to trace it.
181f997f
MK
197.RI ( pid ,
198.IR addr ,
199and
200.IR data
201are ignored.)
a71b27f8 202.IP
181f997f
MK
203The
204.B PTRACE_TRACEME
205request is used only by the tracee;
206the remaining requests are used only by the tracer.
207In the following requests,
208.I pid
209specifies the thread ID of the tracee to be acted on.
8bd58774 210For requests other than
ba8f446e
DV
211.BR PTRACE_ATTACH ,
212.BR PTRACE_SEIZE ,
a797afac 213.BR PTRACE_INTERRUPT ,
b16ecdae 214and
8bd58774 215.BR PTRACE_KILL ,
4d12a715 216the tracee must be stopped.
fea681da 217.TP
8bd58774 218.BR PTRACE_PEEKTEXT ", " PTRACE_PEEKDATA
181f997f 219Read a word at the address
0daa9e92 220.I addr
4d12a715 221in the tracee's memory, returning the word as the result of the
e511ffb6 222.BR ptrace ()
c13182ef 223call.
181f997f
MK
224Linux does not have separate text and data address spaces,
225so these two requests are currently equivalent.
226.RI ( data
051ec121 227is ignored; but see NOTES.)
fea681da 228.TP
428d3520 229.B PTRACE_PEEKUSER
254255af
MK
230.\" PTRACE_PEEKUSR in kernel source, but glibc uses PTRACE_PEEKUSER,
231.\" and that is the name that seems common on other systems.
181f997f 232Read a word at offset
fea681da 233.I addr
4d12a715 234in the tracee's USER area,
8bd58774 235which holds the registers and other information about the process
181f997f
MK
236(see
237.IR <sys/user.h> ).
e63ad01d 238The word is returned as the result of the
e511ffb6 239.BR ptrace ()
c13182ef 240call.
181f997f 241Typically, the offset must be word-aligned, though this might vary by
8660aec0
MK
242architecture.
243See NOTES.
181f997f 244.RI ( data
051ec121 245is ignored; but see NOTES.)
fea681da 246.TP
8bd58774 247.BR PTRACE_POKETEXT ", " PTRACE_POKEDATA
181f997f 248Copy the word
0daa9e92 249.I data
181f997f 250to the address
0daa9e92 251.I addr
4d12a715 252in the tracee's memory.
181f997f 253As for
d6e37473 254.BR PTRACE_PEEKTEXT
181f997f
MK
255and
256.BR PTRACE_PEEKDATA ,
257these two requests are currently equivalent.
fea681da 258.TP
428d3520 259.B PTRACE_POKEUSER
254255af
MK
260.\" PTRACE_POKEUSR in kernel source, but glibc uses PTRACE_POKEUSER,
261.\" and that is the name that seems common on other systems.
181f997f 262Copy the word
0daa9e92 263.I data
fea681da
MK
264to offset
265.I addr
4d12a715 266in the tracee's USER area.
181f997f
MK
267As for
268.BR PTRACE_PEEKUSER ,
269the offset must typically be word-aligned.
c13182ef 270In order to maintain the integrity of the kernel,
8bd58774 271some modifications to the USER area are disallowed.
181f997f 272.\" FIXME In the preceding sentence, which modifications are disallowed,
7fac88a9 273.\" and when they are disallowed, how does user space discover that fact?
fea681da 274.TP
8bd58774 275.BR PTRACE_GETREGS ", " PTRACE_GETFPREGS
92f9c09b 276Copy the tracee's general-purpose or floating-point registers,
181f997f
MK
277respectively, to the address
278.I data
279in the tracer.
280See
281.I <sys/user.h>
282for information on the format of this data.
283.RI ( addr
284is ignored.)
50fe8d53
MK
285Note that SPARC systems have the meaning of
286.I data
287and
288.I addr
289reversed; that is,
290.I data
291is ignored and the registers are copied to the address
292.IR addr .
34709982
MK
293.B PTRACE_GETREGS
294and
295.B PTRACE_GETFPREGS
296are not present on all architectures.
fea681da 297.TP
ba8f446e
DV
298.BR PTRACE_GETREGSET " (since Linux 2.6.34)"
299Read the tracee's registers.
300.I addr
f04ba477 301specifies, in an architecture-dependent way, the type of registers to be read.
ba8f446e
DV
302.B NT_PRSTATUS
303(with numerical value 1)
f04ba477
MK
304usually results in reading of general-purpose registers.
305If the CPU has, for example,
ba8f446e
DV
306floating-point and/or vector registers, they can be retrieved by setting
307.I addr
f04ba477 308to the corresponding
ba8f446e
DV
309.B NT_foo
310constant.
311.I data
312points to a
313.BR "struct iovec" ,
f42ce0a5 314which describes the destination buffer's location and length.
f04ba477 315On return, the kernel modifies
ba8f446e 316.B iov.len
f04ba477 317to indicate the actual number of bytes returned.
ba8f446e 318.TP
6beb1671 319.BR PTRACE_SETREGS ", " PTRACE_SETFPREGS
ba8f446e 320Modify the tracee's general-purpose or floating-point registers,
181f997f
MK
321respectively, from the address
322.I data
323in the tracer.
8bd58774
MK
324As for
325.BR PTRACE_POKEUSER ,
a42c0c5a 326some general-purpose register modifications may be disallowed.
bea08fec 327.\" FIXME . In the preceding sentence, which modifications are disallowed,
7fac88a9 328.\" and when they are disallowed, how does user space discover that fact?
181f997f
MK
329.RI ( addr
330is ignored.)
50fe8d53
MK
331Note that SPARC systems have the meaning of
332.I data
333and
334.I addr
335reversed; that is,
336.I data
337is ignored and the registers are copied from the address
338.IR addr .
34709982
MK
339.B PTRACE_SETREGS
340and
341.B PTRACE_SETFPREGS
342are not present on all architectures.
fea681da 343.TP
ba8f446e 344.BR PTRACE_SETREGSET " (since Linux 2.6.34)"
f04ba477
MK
345Modify the tracee's registers.
346The meaning of
ba8f446e
DV
347.I addr
348and
349.I data
350is analogous to
351.BR PTRACE_GETREGSET .
352.TP
ff01b232
AV
353.BR PTRACE_GETSIGINFO " (since Linux 2.3.99-pre6)"
354Retrieve information about the signal that caused the stop.
355Copy a
356.I siginfo_t
357structure (see
358.BR sigaction (2))
359from the tracee to the address
360.I data
361in the tracer.
362.RI ( addr
363is ignored.)
364.TP
8bd58774 365.BR PTRACE_SETSIGINFO " (since Linux 2.3.99-pre6)"
181f997f
MK
366Set signal information:
367copy a
368.I siginfo_t
369structure from the address
370.I data
371in the tracer to the tracee.
372This will affect only signals that would normally be delivered to
4d12a715 373the tracee and were caught by the tracer.
c13182ef 374It may be difficult to tell
44b35ee0
MK
375these normal signals from synthetic signals generated by
376.BR ptrace ()
8660aec0 377itself.
181f997f
MK
378.RI ( addr
379is ignored.)
44b35ee0 380.TP
7a535f54
AV
381.BR PTRACE_PEEKSIGINFO " (since Linux 3.10)"
382.\" commit 84c751bd4aebbaae995fe32279d3dba48327bad4
383Retrieve
384.I siginfo_t
385structures without removing signals from a queue.
386.I addr
387points to a
388.I ptrace_peeksiginfo_args
83894d15
MK
389structure that specifies the ordinal position from which
390copying of signals should start,
391and the number of signals to copy.
7a535f54 392.I siginfo_t
83894d15
MK
393structures are copied into the buffer pointed to by
394.IR data .
395The return value contains the number of copied signals (zero indicates
396that there is no signal corresponding to the specified ordinal position).
397Within the returned
7a535f54 398.I siginfo
83894d15
MK
399structures,
400the
7a535f54 401.IR si_code
83894d15
MK
402field includes information
403.RB ( __SI_CHLD ,
404.BR __SI_FAULT ,
8abd92fc 405etc.) that are not otherwise exposed to user space.
7a535f54 406.PP
408731d4
MK
407.in +4n
408.EX
7a535f54 409struct ptrace_peeksiginfo_args {
83894d15
MK
410 u64 off; /* Ordinal position in queue at which
411 to start copying signals */
412 u32 flags; /* PTRACE_PEEKSIGINFO_SHARED or 0 */
413 s32 nr; /* Number of signals to copy */
7a535f54 414};
b8302363 415.EE
a6865065 416.in
b8854bae 417.IP
83894d15
MK
418Currently, there is only one flag,
419.BR PTRACE_PEEKSIGINFO_SHARED ,
420for dumping signals from the process-wide signal queue.
421If this flag is not set,
422signals are read from the per-thread queue of the specified thread.
7a535f54
AV
423.in
424.PP
425.TP
9a36b8fc
AV
426.BR PTRACE_GETSIGMASK " (since Linux 3.11)"
427.\" commit 29000caecbe87b6b66f144f72111f0d02fbbf0c1
222475b0
MK
428Place a copy of the mask of blocked signals (see
429.BR sigprocmask (2))
430in the buffer pointed to by
431.IR data ,
432which should be a pointer to a buffer of type
433.IR sigset_t .
9a36b8fc
AV
434The
435.I addr
222475b0
MK
436argument contains the size of the buffer pointed to by
437.IR data
438(i.e.,
439.IR sizeof(sigset_t) ).
9a36b8fc
AV
440.TP
441.BR PTRACE_SETSIGMASK " (since Linux 3.11)"
222475b0
MK
442Change the mask of blocked signals (see
443.BR sigprocmask (2))
444to the value specified in the buffer pointed to by
445.IR data ,
446which should be a pointer to a buffer of type
447.IR sigset_t .
9a36b8fc
AV
448The
449.I addr
222475b0
MK
450argument contains the size of the buffer pointed to by
451.IR data
452(i.e.,
453.IR sizeof(sigset_t) ).
9a36b8fc 454.TP
8bd58774 455.BR PTRACE_SETOPTIONS " (since Linux 2.4.6; see BUGS for caveats)"
181f997f
MK
456Set ptrace options from
457.IR data .
458.RI ( addr
459is ignored.)
460.IR data
461is interpreted as a bit mask of options,
462which are specified by the following flags:
cc7d99c8 463.RS
b89e39ef
MK
464.TP
465.BR PTRACE_O_EXITKILL " (since Linux 3.8)"
466.\" commit 992fb6e170639b0849bace8e49bf31bd37c4123
14d6e62f 467Send a
b89e39ef 468.B SIGKILL
14d6e62f 469signal to the tracee if the tracer exits.
9f1b9726 470This option is useful for ptrace jailers that
c2b54496 471want to ensure that tracees can never escape the tracer's control.
44b35ee0 472.TP
8bd58774 473.BR PTRACE_O_TRACECLONE " (since Linux 2.5.46)"
4d12a715 474Stop the tracee at the next
0bfa087b 475.BR clone (2)
181f997f
MK
476and automatically start tracing the newly cloned process,
477which will start with a
29f9b8fb
DV
478.BR SIGSTOP ,
479or
480.B PTRACE_EVENT_STOP
481if
482.B PTRACE_SEIZE
483was used.
8898a252
MK
484A
485.BR waitpid (2)
dc85ba7c 486by the tracer will return a
8898a252 487.I status
dc85ba7c 488value such that
efeece04 489.IP
dc85ba7c
MK
490.nf
491 status>>8 == (SIGTRAP | (PTRACE_EVENT_CLONE<<8))
492.fi
efeece04 493.IP
181f997f 494The PID of the new process can be retrieved with
8bd58774 495.BR PTRACE_GETEVENTMSG .
181f997f 496.IP
44b35ee0 497This option may not catch
0bfa087b 498.BR clone (2)
c13182ef 499calls in all cases.
4d12a715 500If the tracee calls
0bfa087b 501.BR clone (2)
8bd58774 502with the
0daa9e92 503.B CLONE_VFORK
8bd58774
MK
504flag,
505.B PTRACE_EVENT_VFORK
506will be delivered instead
507if
508.B PTRACE_O_TRACEVFORK
4d12a715 509is set; otherwise if the tracee calls
0bfa087b 510.BR clone (2)
8bd58774
MK
511with the exit signal set to
512.BR SIGCHLD ,
513.B PTRACE_EVENT_FORK
181f997f 514will be delivered if
8bd58774
MK
515.B PTRACE_O_TRACEFORK
516is set.
44b35ee0 517.TP
8bd58774 518.BR PTRACE_O_TRACEEXEC " (since Linux 2.5.46)"
4d12a715 519Stop the tracee at the next
181f997f 520.BR execve (2).
8898a252
MK
521A
522.BR waitpid (2)
dc85ba7c 523by the tracer will return a
8898a252 524.I status
dc85ba7c 525value such that
efeece04 526.IP
dc85ba7c
MK
527.nf
528 status>>8 == (SIGTRAP | (PTRACE_EVENT_EXEC<<8))
529.fi
efeece04 530.IP
8f318249
MK
531If the execing thread is not a thread group leader,
532the thread ID is reset to thread group leader's ID before this stop.
b16d33ef
DV
533Since Linux 3.0, the former thread ID can be retrieved with
534.BR PTRACE_GETEVENTMSG .
44b35ee0 535.TP
8bd58774 536.BR PTRACE_O_TRACEEXIT " (since Linux 2.5.60)"
181f997f 537Stop the tracee at exit.
8898a252
MK
538A
539.BR waitpid (2)
dc85ba7c 540by the tracer will return a
8898a252 541.I status
dc85ba7c 542value such that
efeece04 543.IP
dc85ba7c
MK
544.nf
545 status>>8 == (SIGTRAP | (PTRACE_EVENT_EXIT<<8))
546.fi
efeece04 547.IP
4d12a715 548The tracee's exit status can be retrieved with
8bd58774 549.BR PTRACE_GETEVENTMSG .
181f997f
MK
550.IP
551The tracee is stopped early during process exit,
552when registers are still available,
553allowing the tracer to see where the exit occurred,
c13182ef 554whereas the normal exit notification is done after the process
e63ad01d 555is finished exiting.
181f997f
MK
556Even though context is available,
557the tracer cannot prevent the exit from happening at this point.
cc7d99c8
MK
558.TP
559.BR PTRACE_O_TRACEFORK " (since Linux 2.5.46)"
560Stop the tracee at the next
561.BR fork (2)
562and automatically start tracing the newly forked process,
563which will start with a
29f9b8fb
DV
564.BR SIGSTOP ,
565or
566.B PTRACE_EVENT_STOP
567if
568.B PTRACE_SEIZE
569was used.
cc7d99c8
MK
570A
571.BR waitpid (2)
572by the tracer will return a
573.I status
574value such that
efeece04 575.IP
cc7d99c8
MK
576.nf
577 status>>8 == (SIGTRAP | (PTRACE_EVENT_FORK<<8))
578.fi
efeece04 579.IP
cc7d99c8
MK
580The PID of the new process can be retrieved with
581.BR PTRACE_GETEVENTMSG .
cc7d99c8
MK
582.TP
583.BR PTRACE_O_TRACESYSGOOD " (since Linux 2.4.6)"
584When delivering system call traps, set bit 7 in the signal number
585(i.e., deliver
586.IR "SIGTRAP|0x80" ).
587This makes it easy for the tracer to distinguish
588normal traps from those caused by a system call.
589.RB ( PTRACE_O_TRACESYSGOOD
590may not work on all architectures.)
591.TP
592.BR PTRACE_O_TRACEVFORK " (since Linux 2.5.46)"
593Stop the tracee at the next
594.BR vfork (2)
595and automatically start tracing the newly vforked process,
596which will start with a
29f9b8fb
DV
597.BR SIGSTOP ,
598or
599.B PTRACE_EVENT_STOP
600if
601.B PTRACE_SEIZE
602was used.
cc7d99c8
MK
603A
604.BR waitpid (2)
605by the tracer will return a
606.I status
607value such that
efeece04 608.IP
cc7d99c8
MK
609.nf
610 status>>8 == (SIGTRAP | (PTRACE_EVENT_VFORK<<8))
611.fi
efeece04 612.IP
cc7d99c8
MK
613The PID of the new process can be retrieved with
614.BR PTRACE_GETEVENTMSG .
615.TP
616.BR PTRACE_O_TRACEVFORKDONE " (since Linux 2.5.60)"
617Stop the tracee at the completion of the next
618.BR vfork (2).
619A
620.BR waitpid (2)
621by the tracer will return a
622.I status
623value such that
efeece04 624.IP
cc7d99c8
MK
625.nf
626 status>>8 == (SIGTRAP | (PTRACE_EVENT_VFORK_DONE<<8))
627.fi
efeece04 628.IP
cc7d99c8
MK
629The PID of the new process can (since Linux 2.6.18) be retrieved with
630.BR PTRACE_GETEVENTMSG .
3b4a59c4
KC
631.TP
632.BR PTRACE_O_TRACESECCOMP " (since Linux 3.5)"
633Stop the tracee when a
634.BR seccomp (2)
635.BR SECCOMP_RET_TRACE
81c5080b
MK
636rule is triggered.
637A
3b4a59c4
KC
638.BR waitpid (2)
639by the tracer will return a
640.I status
641value such that
efeece04 642.IP
3b4a59c4
KC
643.nf
644 status>>8 == (SIGTRAP | (PTRACE_EVENT_SECCOMP<<8))
645.fi
efeece04 646.IP
3b4a59c4
KC
647While this triggers a
648.BR PTRACE_EVENT
ff20e9ca
MK
649stop, it is similar to a syscall-enter-stop.
650For details, see the note on
651.B PTRACE_EVENT_SECCOMP
652below.
81c5080b 653The seccomp event message data (from the
3b4a59c4 654.BR SECCOMP_RET_DATA
81c5080b 655portion of the seccomp filter rule) can be retrieved with
3b4a59c4 656.BR PTRACE_GETEVENTMSG .
e3cfeba2 657.TP
b4b436ad
MK
658.BR PTRACE_O_SUSPEND_SECCOMP " (since Linux 4.3)"
659.\" commit 13c4a90119d28cfcb6b5bdd820c233b86c2b0237
660Suspend the tracee's seccomp protections.
661This applies regardless of mode, and
662can be used when the tracee has not yet installed seccomp filters.
663That is, a valid use case is to suspend a tracee's seccomp protections
664before they are installed by the tracee,
665let the tracee install the filters,
666and then clear this flag when the filters should be resumed.
667Setting this option requires that the tracer have the
668.BR CAP_SYS_ADMIN
669capability,
e3cfeba2
TA
670not have any seccomp protections installed, and not have
671.BR PTRACE_O_SUSPEND_SECCOMP
672set on itself.
44b35ee0
MK
673.RE
674.TP
8bd58774 675.BR PTRACE_GETEVENTMSG " (since Linux 2.5.46)"
c13182ef
MK
676Retrieve a message (as an
677.IR "unsigned long" )
44b35ee0 678about the ptrace event
181f997f
MK
679that just happened, placing it at the address
680.I data
681in the tracer.
8bd58774 682For
181f997f 683.BR PTRACE_EVENT_EXIT ,
4d12a715 684this is the tracee's exit status.
8bd58774
MK
685For
686.BR PTRACE_EVENT_FORK ,
181f997f
MK
687.BR PTRACE_EVENT_VFORK ,
688.BR PTRACE_EVENT_VFORK_DONE ,
8bd58774 689and
181f997f
MK
690.BR PTRACE_EVENT_CLONE ,
691this is the PID of the new process.
3b4a59c4
KC
692For
693.BR PTRACE_EVENT_SECCOMP ,
694this is the
695.BR seccomp (2)
696filter's
697.BR SECCOMP_RET_DATA
698associated with the triggered rule.
36f5dd10 699.RI ( addr
181f997f 700is ignored.)
44b35ee0 701.TP
8bd58774 702.B PTRACE_CONT
181f997f
MK
703Restart the stopped tracee process.
704If
705.I data
706is nonzero,
707it is interpreted as the number of a signal to be delivered to the tracee;
c13182ef 708otherwise, no signal is delivered.
4d12a715
DV
709Thus, for example, the tracer can control
710whether a signal sent to the tracee is delivered or not.
181f997f
MK
711.RI ( addr
712is ignored.)
fea681da 713.TP
8bd58774 714.BR PTRACE_SYSCALL ", " PTRACE_SINGLESTEP
181f997f 715Restart the stopped tracee as for
8bd58774 716.BR PTRACE_CONT ,
181f997f
MK
717but arrange for the tracee to be stopped at
718the next entry to or exit from a system call,
c13182ef 719or after execution of a single instruction, respectively.
4d12a715
DV
720(The tracee will also, as usual, be stopped upon receipt of a signal.)
721From the tracer's perspective, the tracee will appear to have been
8bd58774
MK
722stopped by receipt of a
723.BR SIGTRAP .
724So, for
725.BR PTRACE_SYSCALL ,
726for example, the idea is to inspect
c13182ef 727the arguments to the system call at the first stop,
8bd58774
MK
728then do another
729.B PTRACE_SYSCALL
181f997f 730and inspect the return value of the system call at the second stop.
94cffcd7
MK
731The
732.I data
733argument is treated as for
734.BR PTRACE_CONT .
a5c725cf 735.RI ( addr
181f997f 736is ignored.)
fea681da 737.TP
6beb1671 738.BR PTRACE_SYSEMU ", " PTRACE_SYSEMU_SINGLESTEP " (since Linux 2.6.14)"
8bd58774
MK
739For
740.BR PTRACE_SYSEMU ,
181f997f 741continue and stop on entry to the next system call,
ff20e9ca
MK
742which will not be executed.
743See the documentation on syscall-stops below.
8bd58774
MK
744For
745.BR PTRACE_SYSEMU_SINGLESTEP ,
181f997f 746do the same but also singlestep if not a system call.
c13182ef 747This call is used by programs like
4d12a715 748User Mode Linux that want to emulate all the tracee's system calls.
94cffcd7
MK
749The
750.I data
751argument is treated as for
752.BR PTRACE_CONT .
34709982
MK
753The
754.I addr
755argument is ignored.
756These requests are currently
757.\" As at 3.7
d2ea1bd4 758supported only on x86.
44b35ee0 759.TP
ba8f446e
DV
760.BR PTRACE_LISTEN " (since Linux 3.4)"
761Restart the stopped tracee, but prevent it from executing.
762The resulting state of the tracee is similar to a process which
f04ba477
MK
763has been stopped by a
764.B SIGSTOP
765(or other stopping signal).
ba8f446e
DV
766See the "group-stop" subsection for additional information.
767.B PTRACE_LISTEN
33a0ccb2 768works only on tracees attached by
ba8f446e
DV
769.BR PTRACE_SEIZE .
770.TP
8bd58774 771.B PTRACE_KILL
181f997f 772Send the tracee a
8bd58774
MK
773.B SIGKILL
774to terminate it.
181f997f
MK
775.RI ( addr
776and
777.I data
778are ignored.)
779.IP
780.I This operation is deprecated; do not use it!
781Instead, send a
782.BR SIGKILL
783directly using
784.BR kill (2)
785or
786.BR tgkill (2).
787The problem with
788.B PTRACE_KILL
789is that it requires the tracee to be in signal-delivery-stop,
790otherwise it may not work
791(i.e., may complete successfully but won't kill the tracee).
792By contrast, sending a
793.B SIGKILL
794directly has no such limitation.
8898a252
MK
795.\" [Note from Denys Vlasenko:
796.\" deprecation suggested by Oleg Nesterov. He prefers to deprecate it
797.\" instead of describing (and needing to support) PTRACE_KILL's quirks.]
fea681da 798.TP
ba8f446e 799.BR PTRACE_INTERRUPT " (since Linux 3.4)"
f04ba477 800Stop a tracee.
8da59274
DV
801If the tracee is running or sleeping in kernel space and
802.B PTRACE_SYSCALL
803is in effect,
804the system call is interrupted and syscall-exit-stop is reported.
805(The interrupted system call is restarted when the tracee is restarted.)
806If the tracee was already stopped by a signal and
807.B PTRACE_LISTEN
808was sent to it,
809the tracee stops with
810.B PTRACE_EVENT_STOP
ad84c543 811and
8da59274 812.I WSTOPSIG(status)
ad84c543 813returns the stop signal.
8da59274
DV
814If any other ptrace-stop is generated at the same time (for example,
815if a signal is sent to the tracee), this ptrace-stop happens.
a9deb5e0
MF
816If none of the above applies (for example, if the tracee is running in user
817space), it stops with
8da59274
DV
818.B PTRACE_EVENT_STOP
819with
820.I WSTOPSIG(status)
821==
822.BR SIGTRAP .
ba8f446e
DV
823.B PTRACE_INTERRUPT
824only works on tracees attached by
825.BR PTRACE_SEIZE .
826.TP
8bd58774 827.B PTRACE_ATTACH
181f997f 828Attach to the process specified in
fea681da 829.IR pid ,
4d12a715 830making it a tracee of the calling process.
8898a252
MK
831.\" No longer true (removed by Denys Vlasenko, 2011, who remarks:
832.\" "I think it isn't true in non-ancient 2.4 and in 2.6/3.x.
833.\" Basically, it's not true for any Linux in practical use.
4d12a715
DV
834.\" ; the behavior of the tracee is as if it had done a
835.\" .BR PTRACE_TRACEME .
836.\" The calling process actually becomes the parent of the tracee
837.\" process for most purposes (e.g., it will receive
838.\" notification of tracee events and appears in
839.\" .BR ps (1)
840.\" output as the tracee's parent), but a
841.\" .BR getppid (2)
842.\" by the tracee will still return the PID of the original parent.
843The tracee is sent a
8bd58774
MK
844.BR SIGSTOP ,
845but will not necessarily have stopped
e63ad01d 846by the completion of this call; use
181f997f 847.BR waitpid (2)
8b20acd1 848to wait for the tracee to stop.
181f997f
MK
849See the "Attaching and detaching" subsection for additional information.
850.RI ( addr
851and
852.I data
853are ignored.)
efeece04 854.IP
d4c976d8
MK
855Permission to perform a
856.BR PTRACE_ATTACH
857is governed by a ptrace access mode
858.B PTRACE_MODE_ATTACH_REALCREDS
859check; see below.
fea681da 860.TP
ba8f446e 861.BR PTRACE_SEIZE " (since Linux 3.4)"
fec74bb1
MK
862.\"
863.\" Noted by Dmitry Levin:
864.\"
865.\" PTRACE_SEIZE was introduced by commit v3.1-rc1~308^2~28, but
866.\" it had to be used along with a temporary flag PTRACE_SEIZE_DEVEL,
867.\" which was removed later by commit v3.4-rc1~109^2~20.
868.\"
869.\" That is, [before] v3.4 we had a test mode of PTRACE_SEIZE API,
870.\" which was not compatible with the current PTRACE_SEIZE API introduced
871.\" in Linux 3.4.
872.\"
ba8f446e
DV
873Attach to the process specified in
874.IR pid ,
875making it a tracee of the calling process.
876Unlike
877.BR PTRACE_ATTACH ,
878.B PTRACE_SEIZE
f04ba477 879does not stop the process.
28e2ca57
DV
880Group-stops are reported as
881.B PTRACE_EVENT_STOP
53cdec41 882and
28e2ca57 883.I WSTOPSIG(status)
53cdec41 884returns the stop signal.
28e2ca57
DV
885Automatically attached children stop with
886.B PTRACE_EVENT_STOP
53cdec41 887and
28e2ca57 888.I WSTOPSIG(status)
53cdec41 889returns
28e2ca57
DV
890.B SIGTRAP
891instead of having
892.B SIGSTOP
893signal delivered to them.
cc3407d1 894.BR execve (2)
28e2ca57 895does not deliver an extra
53cdec41 896.BR SIGTRAP .
f04ba477 897Only a
ba8f446e
DV
898.BR PTRACE_SEIZE d
899process can accept
900.B PTRACE_INTERRUPT
901and
902.B PTRACE_LISTEN
903commands.
28e2ca57
DV
904The "seized" behavior just described is inherited by
905children that are automatically attached using
906.BR PTRACE_O_TRACEFORK ,
907.BR PTRACE_O_TRACEVFORK ,
908and
909.BR PTRACE_O_TRACECLONE .
ba8f446e
DV
910.I addr
911must be zero.
912.I data
913contains a bit mask of ptrace options to activate immediately.
efeece04 914.IP
c33e8aff
MK
915Permission to perform a
916.BR PTRACE_SEIZE
917is governed by a ptrace access mode
918.B PTRACE_MODE_ATTACH_REALCREDS
919check; see below.
baf11d5c
MK
920.\"
921.TP
922.BR PTRACE_SECCOMP_GET_FILTER " (since Linux 4.4)"
923.\" commit f8e529ed941ba2bbcbf310b575d968159ce7e895
924This operation allows the tracer to dump the tracee's
925classic BPF filters.
efeece04 926.IP
baf11d5c
MK
927.I addr
928is an integer specifying the index of the filter to be dumped.
929The most recently installed filter has the index 0.
930If
931.I addr
932is greater than the number of installed filters,
933the operation fails with the error
934.BR ENOENT .
efeece04 935.IP
baf11d5c
MK
936.I data
937is either a pointer to a
938.IR "struct sock_filter"
939array that is large enough to store the BPF program,
940or NULL if the program is not to be stored.
efeece04 941.IP
baf11d5c
MK
942Upon success,
943the return value is the number of instructions in the BPF program.
944If
945.I data
946was NULL, then this return value can be used to correctly size the
947.IR "struct sock_filter"
948array passed in a subsequent call.
efeece04 949.IP
baf11d5c
MK
950This operation fails with the error
951.B EACCESS
952if the caller does not have the
953.B CAP_SYS_ADMIN
954capability or if the caller is in strict or filter seccomp mode.
955If the filter referred to by
956.I addr
957is not a classic BPF filter, the operation fails with the error
958.BR EMEDIUMTYPE .
efeece04 959.IP
baf11d5c
MK
960This operation is available if the kernel was configured with both the
961.B CONFIG_SECCOMP_FILTER
962and the
963.B CONFIG_CHECKPOINT_RESTORE
964options.
ba8f446e 965.TP
8bd58774 966.B PTRACE_DETACH
181f997f 967Restart the stopped tracee as for
8bd58774 968.BR PTRACE_CONT ,
181f997f
MK
969but first detach from it.
970Under Linux, a tracee can be detached in this way regardless
971of which method was used to initiate tracing.
972.RI ( addr
973is ignored.)
baf11d5c 974.\"
bc8bfd8a
MK
975.TP
976.BR PTRACE_GET_THREAD_AREA " (since Linux 2.6.0)"
977This operation performs a similar task to
978.BR get_thread_area (2).
979It reads the TLS entry in the GDT whose index is given in
980.IR addr ,
981placing a copy of the entry into the
982.IR "struct user_desc"
983pointed to by
984.IR data .
985(By contrast with
986.BR get_thread_area (2),
987the
988.I entry_number
989of the
990.IR "struct user_desc"
991is ignored.)
992.TP
993.BR PTRACE_SET_THREAD_AREA " (since Linux 2.6.0)"
994This operation performs a similar task to
995.BR set_thread_area (2).
996It sets the TLS entry in the GDT whose index is given in
997.IR addr ,
998assigning it the data supplied in the
999.IR "struct user_desc"
1000pointed to by
1001.IR data .
1002(By contrast with
1003.BR set_thread_area (2),
1004the
1005.I entry_number
1006of the
1007.IR "struct user_desc"
1008is ignored; in other words,
1009this ptrace operation can't be used to allocate a free TLS entry.)
1010.\"
4d12a715 1011.SS Death under ptrace
181f997f
MK
1012When a (possibly multithreaded) process receives a killing signal
1013(one whose disposition is set to
1014.B SIG_DFL
1015and whose default action is to kill the process),
8b20acd1
MK
1016all threads exit.
1017Tracees report their death to their tracer(s).
181f997f
MK
1018Notification of this event is delivered via
1019.BR waitpid (2).
dd3568a1 1020.PP
181f997f
MK
1021Note that the killing signal will first cause signal-delivery-stop
1022(on one tracee only),
1023and only after it is injected by the tracer
1024(or after it was dispatched to a thread which isn't traced),
1025will death from the signal happen on
1026.I all
1027tracees within a multithreaded process.
1028(The term "signal-delivery-stop" is explained below.)
dd3568a1 1029.PP
181f997f 1030.B SIGKILL
ca302d0e
DV
1031does not generate signal-delivery-stop and
1032therefore the tracer can't suppress it.
181f997f
MK
1033.B SIGKILL
1034kills even within system calls
1035(syscall-exit-stop is not generated prior to death by
1036.BR SIGKILL ).
1037The net effect is that
1038.B SIGKILL
1039always kills the process (all its threads),
1040even if some threads of the process are ptraced.
dd3568a1 1041.PP
181f997f
MK
1042When the tracee calls
1043.BR _exit (2),
1044it reports its death to its tracer.
4d12a715 1045Other threads are not affected.
dd3568a1 1046.PP
181f997f
MK
1047When any thread executes
1048.BR exit_group (2),
1049every tracee in its thread group reports its death to its tracer.
dd3568a1 1050.PP
181f997f
MK
1051If the
1052.B PTRACE_O_TRACEEXIT
1053option is on,
1054.B PTRACE_EVENT_EXIT
1055will happen before actual death.
1056This applies to exits via
1057.BR exit (2),
1058.BR exit_group (2),
1059and signal deaths (except
55bd9495
MK
1060.BR SIGKILL ,
1061depending on the kernel version; see BUGS below),
181f997f
MK
1062and when threads are torn down on
1063.BR execve (2)
1064in a multithreaded process.
dd3568a1 1065.PP
181f997f
MK
1066The tracer cannot assume that the ptrace-stopped tracee exists.
1067There are many scenarios when the tracee may die while stopped (such as
1068.BR SIGKILL ).
d6e37473 1069Therefore, the tracer must be prepared to handle an
181f997f
MK
1070.B ESRCH
1071error on any ptrace operation.
1072Unfortunately, the same error is returned if the tracee
1073exists but is not ptrace-stopped
1074(for commands which require a stopped tracee),
1075or if it is not traced by the process which issued the ptrace call.
1076The tracer needs to keep track of the stopped/running state of the tracee,
1077and interpret
1078.B ESRCH
1079as "tracee died unexpectedly" only if it knows that the tracee has
1080been observed to enter ptrace-stop.
1081Note that there is no guarantee that
1082.I waitpid(WNOHANG)
1083will reliably report the tracee's death status if a
1084ptrace operation returned
1085.BR ESRCH .
1086.I waitpid(WNOHANG)
1087may return 0 instead.
1088In other words, the tracee may be "not yet fully dead",
1089but already refusing ptrace requests.
dd3568a1 1090.PP
181f997f
MK
1091The tracer can't assume that the tracee
1092.I always
1093ends its life by reporting
1094.I WIFEXITED(status)
1095or
8898a252
MK
1096.IR WIFSIGNALED(status) ;
1097there are cases where this does not occur.
1098For example, if a thread other than thread group leader does an
1099.BR execve (2),
1100it disappears;
1101its PID will never be seen again,
1102and any subsequent ptrace stops will be reported under
1103the thread group leader's PID.
4d12a715
DV
1104.SS Stopped states
1105A tracee can be in two states: running or stopped.
ad84c543 1106For the purposes of ptrace, a tracee which is blocked in a system call
8da59274
DV
1107(such as
1108.BR read (2),
ad84c543
MK
1109.BR pause (2),
1110etc.)
1111is nevertheless considered to be running, even if the tracee is blocked
8da59274
DV
1112for a long time.
1113The state of the tracee after
1114.BR PTRACE_LISTEN
1115is somewhat of a gray area: it is not in any ptrace-stop (ptrace commands
ad84c543
MK
1116won't work on it, and it will deliver
1117.BR waitpid (2)
1118notifications),
8da59274
DV
1119but it also may be considered "stopped" because
1120it is not executing instructions (is not scheduled), and if it was
1121in group-stop before
1122.BR PTRACE_LISTEN ,
ad84c543
MK
1123it will not respond to signals until
1124.B SIGCONT
1125is received.
dd3568a1 1126.PP
181f997f 1127There are many kinds of states when the tracee is stopped, and in ptrace
8b20acd1 1128discussions they are often conflated.
181f997f 1129Therefore, it is important to use precise terms.
dd3568a1 1130.PP
181f997f
MK
1131In this manual page, any stopped state in which the tracee is ready
1132to accept ptrace commands from the tracer is called
1133.IR ptrace-stop .
8b20acd1 1134Ptrace-stops can
181f997f
MK
1135be further subdivided into
1136.IR signal-delivery-stop ,
1137.IR group-stop ,
1138.IR syscall-stop ,
5419141e 1139.IR PTRACE_EVENT stops,
181f997f
MK
1140and so on.
1141These stopped states are described in detail below.
dd3568a1 1142.PP
181f997f
MK
1143When the running tracee enters ptrace-stop, it notifies its tracer using
1144.BR waitpid (2)
1145(or one of the other "wait" system calls).
1146Most of this manual page assumes that the tracer waits with:
dd3568a1 1147.PP
181f997f 1148 pid = waitpid(pid_or_minus_1, &status, __WALL);
dd3568a1 1149.PP
181f997f
MK
1150Ptrace-stopped tracees are reported as returns with
1151.I pid
1152greater than 0 and
1153.I WIFSTOPPED(status)
1154true.
8898a252
MK
1155.\" Denys Vlasenko:
1156.\" Do we require __WALL usage, or will just using 0 be ok? (With 0,
1157.\" I am not 100% sure there aren't ugly corner cases.) Are the
181f997f
MK
1158.\" rules different if user wants to use waitid? Will waitid require
1159.\" WEXITED?
1160.\"
dd3568a1 1161.PP
181f997f
MK
1162The
1163.B __WALL
1164flag does not include the
1165.B WSTOPPED
1166and
1167.B WEXITED
1168flags, but implies their functionality.
dd3568a1 1169.PP
181f997f
MK
1170Setting the
1171.B WCONTINUED
1172flag when calling
1173.BR waitpid (2)
1174is not recommended: the "continued" state is per-process and
1175consuming it can confuse the real parent of the tracee.
dd3568a1 1176.PP
181f997f
MK
1177Use of the
1178.B WNOHANG
1179flag may cause
1180.BR waitpid (2)
1181to return 0 ("no wait results available yet")
1182even if the tracer knows there should be a notification.
1183Example:
408731d4
MK
1184.PP
1185.in +4n
1186.EX
1187errno = 0;
1188ptrace(PTRACE_CONT, pid, 0L, 0L);
1189if (errno == ESRCH) {
1190 /* tracee is dead */
1191 r = waitpid(tracee, &status, __WALL | WNOHANG);
1192 /* r can still be 0 here! */
1193}
1194.EE
1195.in
bea08fec 1196.\" FIXME .
181f997f
MK
1197.\" waitid usage? WNOWAIT?
1198.\" describe how wait notifications queue (or not queue)
dd3568a1 1199.PP
4d12a715 1200The following kinds of ptrace-stops exist: signal-delivery-stops,
a5c725cf
DP
1201group-stops,
1202.B PTRACE_EVENT
1203stops, syscall-stops.
181f997f
MK
1204They all are reported by
1205.BR waitpid (2)
1206with
1207.I WIFSTOPPED(status)
1208true.
1209They may be differentiated by examining the value
1210.IR status>>8 ,
1211and if there is ambiguity in that value, by querying
1212.BR PTRACE_GETSIGINFO .
181f997f
MK
1213(Note: the
1214.I WSTOPSIG(status)
dc85ba7c 1215macro can't be used to perform this examination,
8898a252 1216because it returns the value
0ce81ab5 1217.IR "(status>>8)\ &\ 0xff" .)
4d12a715 1218.SS Signal-delivery-stop
181f997f
MK
1219When a (possibly multithreaded) process receives any signal except
1220.BR SIGKILL ,
1221the kernel selects an arbitrary thread which handles the signal.
1222(If the signal is generated with
1223.BR tgkill (2),
1224the target thread can be explicitly selected by the caller.)
1225If the selected thread is traced, it enters signal-delivery-stop.
1226At this point, the signal is not yet delivered to the process,
1227and can be suppressed by the tracer.
1228If the tracer doesn't suppress the signal,
181f997f 1229it passes the signal to the tracee in the next ptrace restart request.
8b20acd1 1230This second step of signal delivery is called
181f997f
MK
1231.I "signal injection"
1232in this manual page.
1233Note that if the signal is blocked,
1234signal-delivery-stop doesn't happen until the signal is unblocked,
1235with the usual exception that
1236.B SIGSTOP
1237can't be blocked.
dd3568a1 1238.PP
181f997f
MK
1239Signal-delivery-stop is observed by the tracer as
1240.BR waitpid (2)
1241returning with
1242.I WIFSTOPPED(status)
f098951d 1243true, with the signal returned by
181f997f 1244.IR WSTOPSIG(status) .
f098951d 1245If the signal is
181f997f
MK
1246.BR SIGTRAP ,
1247this may be a different kind of ptrace-stop;
1248see the "Syscall-stops" and "execve" sections below for details.
8b20acd1 1249If
181f997f
MK
1250.I WSTOPSIG(status)
1251returns a stopping signal, this may be a group-stop; see below.
4d12a715 1252.SS Signal injection and suppression
181f997f
MK
1253After signal-delivery-stop is observed by the tracer,
1254the tracer should restart the tracee with the call
dd3568a1 1255.PP
181f997f 1256 ptrace(PTRACE_restart, pid, 0, sig)
dd3568a1 1257.PP
181f997f
MK
1258where
1259.B PTRACE_restart
1260is one of the restarting ptrace requests.
1261If
1262.I sig
1263is 0, then a signal is not delivered.
1264Otherwise, the signal
1265.I sig
1266is delivered.
1267This operation is called
1268.I "signal injection"
1269in this manual page, to distinguish it from signal-delivery-stop.
dd3568a1 1270.PP
8898a252 1271The
181f997f
MK
1272.I sig
1273value may be different from the
1274.I WSTOPSIG(status)
1275value: the tracer can cause a different signal to be injected.
dd3568a1 1276.PP
181f997f 1277Note that a suppressed signal still causes system calls to return
8b20acd1 1278prematurely.
15d33661 1279In this case, system calls will be restarted: the tracer will
a17e05c5 1280observe the tracee to reexecute the interrupted system call (or
a5c725cf 1281.BR restart_syscall (2)
177660fa 1282system call for a few system calls which use a different mechanism
f098951d
DV
1283for restarting) if the tracer uses
1284.BR PTRACE_SYSCALL .
1285Even system calls (such as
a5c725cf 1286.BR poll (2))
f098951d 1287which are not restartable after signal are restarted after
a17e05c5 1288signal is suppressed;
177660fa 1289however, kernel bugs exist which cause some system calls to fail with
181f997f
MK
1290.B EINTR
1291even though no observable signal is injected to the tracee.
dd3568a1 1292.PP
8898a252 1293Restarting ptrace commands issued in ptrace-stops other than
181f997f
MK
1294signal-delivery-stop are not guaranteed to inject a signal, even if
1295.I sig
8b20acd1 1296is nonzero.
181f997f
MK
1297No error is reported; a nonzero
1298.I sig
1299may simply be ignored.
1300Ptrace users should not try to "create a new signal" this way: use
1301.BR tgkill (2)
1302instead.
dd3568a1 1303.PP
8898a252
MK
1304The fact that signal injection requests may be ignored
1305when restarting the tracee after
1306ptrace stops that are not signal-delivery-stops
1307is a cause of confusion among ptrace users.
181f997f
MK
1308One typical scenario is that the tracer observes group-stop,
1309mistakes it for signal-delivery-stop, restarts the tracee with
efeece04 1310.PP
ba8f446e 1311 ptrace(PTRACE_restart, pid, 0, stopsig)
efeece04 1312.PP
181f997f
MK
1313with the intention of injecting
1314.IR stopsig ,
1315but
1316.I stopsig
1317gets ignored and the tracee continues to run.
dd3568a1 1318.PP
181f997f
MK
1319The
1320.B SIGCONT
1321signal has a side effect of waking up (all threads of)
1322a group-stopped process.
1323This side effect happens before signal-delivery-stop.
a5c725cf 1324The tracer can't suppress this side effect (it can
181f997f
MK
1325only suppress signal injection, which only causes the
1326.BR SIGCONT
1327handler to not be executed in the tracee, if such a handler is installed).
1328In fact, waking up from group-stop may be followed by
1329signal-delivery-stop for signal(s)
1330.I other than
1331.BR SIGCONT ,
1332if they were pending when
1333.B SIGCONT
1334was delivered.
1335In other words,
1336.B SIGCONT
1337may be not the first signal observed by the tracee after it was sent.
dd3568a1 1338.PP
181f997f 1339Stopping signals cause (all threads of) a process to enter group-stop.
4d12a715 1340This side effect happens after signal injection, and therefore can be
181f997f 1341suppressed by the tracer.
dd3568a1 1342.PP
dc85ba7c
MK
1343In Linux 2.4 and earlier, the
1344.B SIGSTOP
1345signal can't be injected.
1346.\" In the Linux 2.4 sources, in arch/i386/kernel/signal.c::do_signal(),
1347.\" there is:
d6e37473 1348.\"
dc85ba7c
MK
1349.\" /* The debugger continued. Ignore SIGSTOP. */
1350.\" if (signr == SIGSTOP)
1351.\" continue;
dd3568a1 1352.PP
181f997f
MK
1353.B PTRACE_GETSIGINFO
1354can be used to retrieve a
1355.I siginfo_t
1356structure which corresponds to the delivered signal.
1357.B PTRACE_SETSIGINFO
1358may be used to modify it.
1359If
1360.B PTRACE_SETSIGINFO
1361has been used to alter
1362.IR siginfo_t ,
1363the
1364.I si_signo
1365field and the
1366.I sig
1367parameter in the restarting command must match,
4d12a715
DV
1368otherwise the result is undefined.
1369.SS Group-stop
181f997f 1370When a (possibly multithreaded) process receives a stopping signal,
8b20acd1
MK
1371all threads stop.
1372If some threads are traced, they enter a group-stop.
181f997f
MK
1373Note that the stopping signal will first cause signal-delivery-stop
1374(on one tracee only), and only after it is injected by the tracer
1375(or after it was dispatched to a thread which isn't traced),
1376will group-stop be initiated on
1377.I all
1378tracees within the multithreaded process.
1379As usual, every tracee reports its group-stop separately
1380to the corresponding tracer.
dd3568a1 1381.PP
181f997f
MK
1382Group-stop is observed by the tracer as
1383.BR waitpid (2)
1384returning with
1385.I WIFSTOPPED(status)
1386true, with the stopping signal available via
1387.IR WSTOPSIG(status) .
1388The same result is returned by some other classes of ptrace-stops,
1389therefore the recommended practice is to perform the call
dd3568a1 1390.PP
181f997f 1391 ptrace(PTRACE_GETSIGINFO, pid, 0, &siginfo)
dd3568a1 1392.PP
181f997f
MK
1393The call can be avoided if the signal is not
1394.BR SIGSTOP ,
1395.BR SIGTSTP ,
1396.BR SIGTTIN ,
1397or
1398.BR SIGTTOU ;
1399only these four signals are stopping signals.
1400If the tracer sees something else, it can't be a group-stop.
1401Otherwise, the tracer needs to call
1402.BR PTRACE_GETSIGINFO .
1403If
1404.B PTRACE_GETSIGINFO
1405fails with
1406.BR EINVAL ,
1407then it is definitely a group-stop.
1408(Other failure codes are possible, such as
1409.B ESRCH
1410("no such process") if a
1411.B SIGKILL
1412killed the tracee.)
dd3568a1 1413.PP
ad84c543 1414If tracee was attached using
72906215 1415.BR PTRACE_SEIZE ,
ad84c543 1416group-stop is indicated by
8da59274 1417.BR PTRACE_EVENT_STOP :
ad84c543
MK
1418.IR "status>>16 == PTRACE_EVENT_STOP" .
1419This allows detection of group-stops
1420without requiring an extra
8da59274
DV
1421.B PTRACE_GETSIGINFO
1422call.
dd3568a1 1423.PP
f04ba477 1424As of Linux 2.6.38,
181f997f
MK
1425after the tracer sees the tracee ptrace-stop and until it
1426restarts or kills it, the tracee will not run,
1427and will not send notifications (except
1428.B SIGKILL
1429death) to the tracer, even if the tracer enters into another
1430.BR waitpid (2)
8b20acd1 1431call.
dd3568a1 1432.PP
b8d02d56
MK
1433The kernel behavior described in the previous paragraph
1434causes a problem with transparent handling of stopping signals.
1435If the tracer restarts the tracee after group-stop,
dc85ba7c 1436the stopping signal
8898a252 1437is effectively ignored\(emthe tracee doesn't remain stopped, it runs.
181f997f
MK
1438If the tracer doesn't restart the tracee before entering into the next
1439.BR waitpid (2),
1440future
1441.B SIGCONT
b8d02d56
MK
1442signals will not be reported to the tracer;
1443this would cause the
181f997f 1444.B SIGCONT
b8d02d56 1445signals to have no effect on the tracee.
dd3568a1 1446.PP
f04ba477 1447Since Linux 3.4, there is a method to overcome this problem: instead of
ba8f446e
DV
1448.BR PTRACE_CONT ,
1449a
1450.B PTRACE_LISTEN
1451command can be used to restart a tracee in a way where it does not execute,
f04ba477
MK
1452but waits for a new event which it can report via
1453.BR waitpid (2)
1454(such as when
ba8f446e
DV
1455it is restarted by a
1456.BR SIGCONT ).
4d12a715 1457.SS PTRACE_EVENT stops
181f997f
MK
1458If the tracer sets
1459.B PTRACE_O_TRACE_*
1460options, the tracee will enter ptrace-stops called
1461.B PTRACE_EVENT
1462stops.
dd3568a1 1463.PP
181f997f
MK
1464.B PTRACE_EVENT
1465stops are observed by the tracer as
1466.BR waitpid (2)
1467returning with
1468.IR WIFSTOPPED(status) ,
1469and
1470.I WSTOPSIG(status)
1471returns
1472.BR SIGTRAP .
1473An additional bit is set in the higher byte of the status word:
1474the value
1475.I status>>8
1476will be
efeece04 1477.PP
181f997f 1478 (SIGTRAP | PTRACE_EVENT_foo << 8).
efeece04 1479.PP
8b20acd1 1480The following events exist:
181f997f
MK
1481.TP
1482.B PTRACE_EVENT_VFORK
1483Stop before return from
1484.BR vfork (2)
1485or
1486.BR clone (2)
1487with the
1488.B CLONE_VFORK
1489flag.
1490When the tracee is continued after this stop, it will wait for child to
1491exit/exec before continuing its execution
1492(in other words, the usual behavior on
1493.BR vfork (2)).
1494.TP
1495.B PTRACE_EVENT_FORK
1496Stop before return from
1497.BR fork (2)
1498or
1499.BR clone (2)
1500with the exit signal set to
1501.BR SIGCHLD .
1502.TP
1503.B PTRACE_EVENT_CLONE
1504Stop before return from
a5c725cf 1505.BR clone (2).
181f997f
MK
1506.TP
1507.B PTRACE_EVENT_VFORK_DONE
1508Stop before return from
1509.BR vfork (2)
1510or
1511.BR clone (2)
1512with the
1513.B CLONE_VFORK
1514flag,
1515but after the child unblocked this tracee by exiting or execing.
dd3568a1 1516.PP
181f997f
MK
1517For all four stops described above,
1518the stop occurs in the parent (i.e., the tracee),
1519not in the newly created thread.
1520.BR PTRACE_GETEVENTMSG
1521can be used to retrieve the new thread's ID.
1522.TP
1523.B PTRACE_EVENT_EXEC
1524Stop before return from
1525.BR execve (2).
b16d33ef
DV
1526Since Linux 3.0,
1527.BR PTRACE_GETEVENTMSG
1528returns the former thread ID.
181f997f
MK
1529.TP
1530.B PTRACE_EVENT_EXIT
1531Stop before exit (including death from
1532.BR exit_group (2)),
1533signal death, or exit caused by
1534.BR execve (2)
1535in a multithreaded process.
1536.B PTRACE_GETEVENTMSG
1537returns the exit status.
8b20acd1
MK
1538Registers can be examined
1539(unlike when "real" exit happens).
181f997f
MK
1540The tracee is still alive; it needs to be
1541.BR PTRACE_CONT ed
1542or
1543.BR PTRACE_DETACH ed
1544to finish exiting.
ba8f446e
DV
1545.TP
1546.B PTRACE_EVENT_STOP
1547Stop induced by
1548.B PTRACE_INTERRUPT
29f9b8fb
DV
1549command, or group-stop, or initial ptrace-stop when a new child is attached
1550(only if attached using
28e2ca57 1551.BR PTRACE_SEIZE ).
3b4a59c4
KC
1552.TP
1553.B PTRACE_EVENT_SECCOMP
1554Stop triggered by a
1555.BR seccomp (2)
1556rule on tracee syscall entry when
1557.BR PTRACE_O_TRACESECCOMP
81c5080b
MK
1558has been set by the tracer.
1559The seccomp event message data (from the
3b4a59c4 1560.BR SECCOMP_RET_DATA
81c5080b 1561portion of the seccomp filter rule) can be retrieved with
ff20e9ca
MK
1562.BR PTRACE_GETEVENTMSG .
1563The semantics of this stop are described in
5419141e 1564detail in a separate section below.
dd3568a1 1565.PP
181f997f
MK
1566.B PTRACE_GETSIGINFO
1567on
1568.B PTRACE_EVENT
1569stops returns
b16d33ef
DV
1570.B SIGTRAP
1571in
181f997f
MK
1572.IR si_signo ,
1573with
1574.I si_code
1575set to
1576.IR "(event<<8)\ |\ SIGTRAP" .
4d12a715 1577.SS Syscall-stops
181f997f 1578If the tracee was restarted by
131bcd7a
KF
1579.BR PTRACE_SYSCALL
1580or
1581.BR PTRACE_SYSEMU ,
181f997f 1582the tracee enters
131bcd7a
KF
1583syscall-enter-stop just prior to entering any system call (which
1584will not be executed if the restart was using
ff20e9ca 1585.BR PTRACE_SYSEMU ,
131bcd7a
KF
1586regardless of any change made to registers at this point or how the
1587tracee is restarted after this stop).
1588No matter which method caused the syscall-entry-stop,
1589if the tracer restarts the tracee with
181f997f
MK
1590.BR PTRACE_SYSCALL ,
1591the tracee enters syscall-exit-stop when the system call is finished,
1592or if it is interrupted by a signal.
1593(That is, signal-delivery-stop never happens between syscall-enter-stop
1594and syscall-exit-stop; it happens
1595.I after
ff20e9ca
MK
1596syscall-exit-stop.).
1597If the tracee is continued using any other method (including
1598.BR PTRACE_SYSEMU ),
1599no syscall-exit-stop occurs.
1600Note that all mentions
131bcd7a
KF
1601.BR PTRACE_SYSEMU
1602apply equally to
1603.BR PTRACE_SYSEMU_SINGLESTEP.
dd3568a1 1604.PP
0d5b85ca 1605However, even if the tracee was continued using
131bcd7a
KF
1606.BR PTRACE_SYSCALL
1607, it is not guaranteed that the next stop will be a syscall-exit-stop.
181f997f
MK
1608Other possibilities are that the tracee may stop in a
1609.B PTRACE_EVENT
5419141e 1610stop (including seccomp stops), exit (if it entered
181f997f
MK
1611.BR _exit (2)
1612or
1613.BR exit_group (2)),
1614be killed by
1615.BR SIGKILL ,
1616or die silently (if it is a thread group leader, the
1617.BR execve (2)
1618happened in another thread,
1619and that thread is not traced by the same tracer;
1620this situation is discussed later).
dd3568a1 1621.PP
181f997f
MK
1622Syscall-enter-stop and syscall-exit-stop are observed by the tracer as
1623.BR waitpid (2)
1624returning with
1625.I WIFSTOPPED(status)
1626true, and
1627.I WSTOPSIG(status)
1628giving
1629.BR SIGTRAP .
1630If the
1631.B PTRACE_O_TRACESYSGOOD
1632option was set by the tracer, then
1633.I WSTOPSIG(status)
1634will give the value
1635.IR "(SIGTRAP\ |\ 0x80)" .
dd3568a1 1636.PP
4d12a715 1637Syscall-stops can be distinguished from signal-delivery-stop with
181f997f
MK
1638.B SIGTRAP
1639by querying
1640.BR PTRACE_GETSIGINFO
1641for the following cases:
1642.TP
1643.IR si_code " <= 0"
1644.B SIGTRAP
7fac88a9 1645was delivered as a result of a user-space action,
8898a252 1646for example, a system call
181f997f 1647.RB ( tgkill (2),
8898a252 1648.BR kill (2),
181f997f 1649.BR sigqueue (3),
8898a252
MK
1650etc.),
1651expiration of a POSIX timer,
1652change of state on a POSIX message queue,
1653or completion of an asynchronous I/O request.
181f997f
MK
1654.TP
1655.IR si_code " == SI_KERNEL (0x80)"
1656.B SIGTRAP
1657was sent by the kernel.
1658.TP
1659.IR si_code " == SIGTRAP or " si_code " == (SIGTRAP|0x80)"
1660This is a syscall-stop.
dd3568a1 1661.PP
181f997f
MK
1662However, syscall-stops happen very often (twice per system call),
1663and performing
1664.B PTRACE_GETSIGINFO
1665for every syscall-stop may be somewhat expensive.
dd3568a1 1666.PP
181f997f
MK
1667Some architectures allow the cases to be distinguished
1668by examining registers.
1669For example, on x86,
1670.I rax
1671==
1672.RB - ENOSYS
1673in syscall-enter-stop.
1674Since
1675.B SIGTRAP
1676(like any other signal) always happens
1677.I after
1678syscall-exit-stop,
1679and at this point
1680.I rax
1681almost never contains
1682.RB - ENOSYS ,
1683the
1684.B SIGTRAP
1685looks like "syscall-stop which is not syscall-enter-stop";
1686in other words, it looks like a
8b20acd1 1687"stray syscall-exit-stop" and can be detected this way.
181f997f 1688But such detection is fragile and is best avoided.
dd3568a1 1689.PP
181f997f
MK
1690Using the
1691.B PTRACE_O_TRACESYSGOOD
a17e05c5 1692option is the recommended method to distinguish syscall-stops
b8d02d56 1693from other kinds of ptrace-stops,
181f997f 1694since it is reliable and does not incur a performance penalty.
dd3568a1 1695.PP
181f997f
MK
1696Syscall-enter-stop and syscall-exit-stop are
1697indistinguishable from each other by the tracer.
1698The tracer needs to keep track of the sequence of
4d12a715 1699ptrace-stops in order to not misinterpret syscall-enter-stop as
8b20acd1 1700syscall-exit-stop or vice versa.
ff20e9ca 1701In general, a syscall-enter-stop is
181f997f
MK
1702always followed by syscall-exit-stop,
1703.B PTRACE_EVENT
ff20e9ca 1704stop, or the tracee's death;
181f997f 1705no other kinds of ptrace-stop can occur in between.
5419141e 1706However, note that seccomp stops (see below) can cause syscall-exit-stops,
0d5b85ca 1707without preceding syscall-entry-stops.
ff20e9ca
MK
1708If seccomp is in use, care needs
1709to be taken not to misinterpret such stops as syscall-entry-stops.
dd3568a1 1710.PP
181f997f
MK
1711If after syscall-enter-stop,
1712the tracer uses a restarting command other than
1713.BR PTRACE_SYSCALL ,
1714syscall-exit-stop is not generated.
dd3568a1 1715.PP
181f997f
MK
1716.B PTRACE_GETSIGINFO
1717on syscall-stops returns
1718.B SIGTRAP
1719in
1720.IR si_signo ,
1721with
1722.I si_code
1723set to
1724.B SIGTRAP
1725or
1726.IR (SIGTRAP|0x80) .
ff20e9ca
MK
1727.\"
1728.SS PTRACE_EVENT_SECCOMP stops (Linux 3.5 to 4.7)
5419141e
KF
1729The behavior of
1730.BR PTRACE_EVENT_SECCOMP
1731stops and their interaction with other kinds
ff20e9ca
MK
1732of ptrace stops has changed between kernel versions.
1733This documents the behavior
1734from their introduction until Linux 4.7 (inclusive).
1735The behavior in later kernel versions is documented in the next section.
efeece04 1736.PP
5419141e
KF
1737A
1738.BR PTRACE_EVENT_SECCOMP
1739stop occurs whenever a
1740.BR SECCOMP_RET_TRACE
ff20e9ca
MK
1741rule is triggered.
1742This is independent of which methods was used to restart the system call.
1743Notably, seccomp still runs even if the tracee was restarted using
5419141e
KF
1744.BR PTRACE_SYSEMU
1745and this system call is unconditionally skipped.
efeece04 1746.PP
5419141e 1747Restarts from this stop will behave as if the stop had occurred right
ff20e9ca
MK
1748before the system call in question.
1749In particular, both
5419141e
KF
1750.BR PTRACE_SYSCALL
1751and
1752.BR PTRACE_SYSEMU
ff20e9ca
MK
1753will normally cause a subsequent syscall-entry-stop.
1754However, if after the
5419141e 1755.BR PTRACE_EVENT_SECCOMP
ff20e9ca
MK
1756the system call number is negative,
1757both the syscall-entry-stop and the system call itself will be skipped.
1758This means that if the system call number is negative after a
5419141e
KF
1759.BR PTRACE_EVENT_SECCOMP
1760and the tracee is restarted using
1761.BR PTRACE_SYSCALL,
1762the next observed stop will be a syscall-exit-stop,
ff20e9ca
MK
1763rather than the syscall-entry-stop that might have been expected.
1764.\"
1765.SS PTRACE_EVENT_SECCOMP stops (since Linux 4.8)
1766Starting with Linux 4.8,
1767.\" commit 93e35efb8de45393cf61ed07f7b407629bf698ea
1768the
5419141e 1769.BR PTRACE_EVENT_SECCOMP
ff20e9ca
MK
1770stop was reordered to occur between syscall-entry-stop and
1771syscall-exit-stop.
1772Note that seccomp no longer runs (and no
1773.B PTRACE_EVENT_SECCOMP
1774will be reported) if the system call is skipped due to
1775.BR PTRACE_SYSEMU .
efeece04 1776.PP
ff20e9ca
MK
1777Functionally, a
1778.B PTRACE_EVENT_SECCOMP
1779stop functions comparably
1780to a syscall-entry-stop (i.e., continuations using
5419141e 1781.BR PTRACE_SYSCALL
ff20e9ca
MK
1782will cause syscall-exit-stops,
1783the system call number may be changed and any other modified registers
1784are visible to the to-be-executed system call as well).
1785Note that there may be,
0d5b85ca 1786but need not have been a preceding syscall-entry-stop.
efeece04 1787.PP
5419141e
KF
1788After a
1789.BR PTRACE_EVENT_SECCOMP
ff20e9ca 1790stop, seccomp will be rerun, with a
5419141e
KF
1791.BR SECCOMP_RET_TRACE
1792rule now functioning the same as a
ff20e9ca
MK
1793.BR SECCOMP_RET_ALLOW .
1794Specifically, this means that if registers are not modified during the
5419141e
KF
1795.BR PTRACE_EVENT_SECCOMP
1796stop, the system call will then be allowed.
ff20e9ca 1797.\"
131bcd7a 1798.SS PTRACE_SINGLESTEP stops
b8d02d56 1799[Details of these kinds of stops are yet to be documented.]
181f997f 1800.\"
bea08fec 1801.\" FIXME .
131bcd7a 1802.\" document stops occurring with PTRACE_SINGLESTEP
ff20e9ca 1803.\"
4d12a715 1804.SS Informational and restarting ptrace commands
181f997f
MK
1805Most ptrace commands (all except
1806.BR PTRACE_ATTACH ,
ba8f446e 1807.BR PTRACE_SEIZE ,
181f997f 1808.BR PTRACE_TRACEME ,
ba8f446e 1809.BR PTRACE_INTERRUPT ,
181f997f
MK
1810and
1811.BR PTRACE_KILL )
1812require the tracee to be in a ptrace-stop, otherwise they fail with
1813.BR ESRCH .
dd3568a1 1814.PP
181f997f
MK
1815When the tracee is in ptrace-stop,
1816the tracer can read and write data to
1817the tracee using informational commands.
1818These commands leave the tracee in ptrace-stopped state:
dd3568a1 1819.PP
408731d4
MK
1820.in +4n
1821.EX
1822ptrace(PTRACE_PEEKTEXT/PEEKDATA/PEEKUSER, pid, addr, 0);
1823ptrace(PTRACE_POKETEXT/POKEDATA/POKEUSER, pid, addr, long_val);
1824ptrace(PTRACE_GETREGS/GETFPREGS, pid, 0, &struct);
1825ptrace(PTRACE_SETREGS/SETFPREGS, pid, 0, &struct);
1826ptrace(PTRACE_GETREGSET, pid, NT_foo, &iov);
1827ptrace(PTRACE_SETREGSET, pid, NT_foo, &iov);
1828ptrace(PTRACE_GETSIGINFO, pid, 0, &siginfo);
1829ptrace(PTRACE_SETSIGINFO, pid, 0, &siginfo);
1830ptrace(PTRACE_GETEVENTMSG, pid, 0, &long_var);
1831ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_flags);
1832.EE
1833.in
dd3568a1 1834.PP
8b20acd1 1835Note that some errors are not reported.
181f997f
MK
1836For example, setting signal information
1837.RI ( siginfo )
4d12a715 1838may have no effect in some ptrace-stops, yet the call may succeed
181f997f
MK
1839(return 0 and not set
1840.IR errno );
1841querying
1842.B PTRACE_GETEVENTMSG
1843may succeed and return some random value if current ptrace-stop
1844is not documented as returning a meaningful event message.
dd3568a1 1845.PP
181f997f 1846The call
efeece04 1847.PP
181f997f 1848 ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_flags);
efeece04 1849.PP
181f997f
MK
1850affects one tracee.
1851The tracee's current flags are replaced.
1852Flags are inherited by new tracees created and "auto-attached" via active
1853.BR PTRACE_O_TRACEFORK ,
1854.BR PTRACE_O_TRACEVFORK ,
1855or
1856.BR PTRACE_O_TRACECLONE
1857options.
dd3568a1 1858.PP
181f997f
MK
1859Another group of commands makes the ptrace-stopped tracee run.
1860They have the form:
dd3568a1 1861.PP
8898a252 1862 ptrace(cmd, pid, 0, sig);
dd3568a1 1863.PP
181f997f
MK
1864where
1865.I cmd
1866is
1867.BR PTRACE_CONT ,
ba8f446e 1868.BR PTRACE_LISTEN ,
181f997f
MK
1869.BR PTRACE_DETACH ,
1870.BR PTRACE_SYSCALL ,
1871.BR PTRACE_SINGLESTEP ,
1872.BR PTRACE_SYSEMU ,
1873or
a5c725cf 1874.BR PTRACE_SYSEMU_SINGLESTEP .
181f997f
MK
1875If the tracee is in signal-delivery-stop,
1876.I sig
1877is the signal to be injected (if it is nonzero).
1878Otherwise,
1879.I sig
1880may be ignored.
8898a252
MK
1881(When restarting a tracee from a ptrace-stop other than signal-delivery-stop,
1882recommended practice is to always pass 0 in
a5c725cf 1883.IR sig .)
4d12a715 1884.SS Attaching and detaching
181f997f 1885A thread can be attached to the tracer using the call
efeece04 1886.PP
181f997f 1887 ptrace(PTRACE_ATTACH, pid, 0, 0);
efeece04 1888.PP
ba8f446e 1889or
efeece04 1890.PP
ba8f446e 1891 ptrace(PTRACE_SEIZE, pid, 0, PTRACE_O_flags);
efeece04 1892.PP
ba8f446e
DV
1893.B PTRACE_ATTACH
1894sends
181f997f
MK
1895.B SIGSTOP
1896to this thread.
1897If the tracer wants this
1898.B SIGSTOP
1899to have no effect, it needs to suppress it.
1900Note that if other signals are concurrently sent to
1901this thread during attach,
1902the tracer may see the tracee enter signal-delivery-stop
1903with other signal(s) first!
1904The usual practice is to reinject these signals until
1905.B SIGSTOP
1906is seen, then suppress
1907.B SIGSTOP
1908injection.
181f997f
MK
1909The design bug here is that a ptrace attach and a concurrently delivered
1910.B SIGSTOP
1911may race and the concurrent
1912.B SIGSTOP
1913may be lost.
1914.\"
3b1fdaf3 1915.\" FIXME Describe how to attach to a thread which is already group-stopped.
dd3568a1 1916.PP
181f997f
MK
1917Since attaching sends
1918.B SIGSTOP
1919and the tracer usually suppresses it, this may cause a stray
a5c725cf 1920.B EINTR
181f997f 1921return from the currently executing system call in the tracee,
a5c725cf 1922as described in the "Signal injection and suppression" section.
dd3568a1 1923.PP
f04ba477 1924Since Linux 3.4,
ba8f446e
DV
1925.B PTRACE_SEIZE
1926can be used instead of
1927.BR PTRACE_ATTACH .
1928.B PTRACE_SEIZE
e3948c69
MK
1929does not stop the attached process.
1930If you need to stop
ba8f446e
DV
1931it after attach (or at any other time) without sending it any signals,
1932use
1933.B PTRACE_INTERRUPT
1934command.
dd3568a1 1935.PP
181f997f 1936The request
efeece04 1937.PP
181f997f 1938 ptrace(PTRACE_TRACEME, 0, 0, 0);
efeece04 1939.PP
181f997f
MK
1940turns the calling thread into a tracee.
1941The thread continues to run (doesn't enter ptrace-stop).
1942A common practice is to follow the
1943.B PTRACE_TRACEME
1944with
efeece04 1945.PP
181f997f 1946 raise(SIGSTOP);
efeece04 1947.PP
181f997f 1948and allow the parent (which is our tracer now) to observe our
4d12a715 1949signal-delivery-stop.
dd3568a1 1950.PP
d6e37473 1951If the
181f997f
MK
1952.BR PTRACE_O_TRACEFORK ,
1953.BR PTRACE_O_TRACEVFORK ,
1954or
1955.BR PTRACE_O_TRACECLONE
1956options are in effect, then children created by, respectively,
1957.BR vfork (2)
1958or
1959.BR clone (2)
1960with the
1961.B CLONE_VFORK
1962flag,
1963.BR fork (2)
1964or
1965.BR clone (2)
1966with the exit signal set to
1967.BR SIGCHLD ,
1968and other kinds of
1969.BR clone (2),
1970are automatically attached to the same tracer which traced their parent.
1971.B SIGSTOP
1972is delivered to the children, causing them to enter
1973signal-delivery-stop after they exit the system call which created them.
dd3568a1 1974.PP
181f997f 1975Detaching of the tracee is performed by:
efeece04 1976.PP
181f997f 1977 ptrace(PTRACE_DETACH, pid, 0, sig);
efeece04 1978.PP
181f997f
MK
1979.B PTRACE_DETACH
1980is a restarting operation;
1981therefore it requires the tracee to be in ptrace-stop.
1982If the tracee is in signal-delivery-stop, a signal can be injected.
1983Otherwise, the
1984.I sig
1985parameter may be silently ignored.
dd3568a1 1986.PP
181f997f
MK
1987If the tracee is running when the tracer wants to detach it,
1988the usual solution is to send
1989.B SIGSTOP
1990(using
1991.BR tgkill (2),
1992to make sure it goes to the correct thread),
1993wait for the tracee to stop in signal-delivery-stop for
1994.B SIGSTOP
1995and then detach it (suppressing
1996.B SIGSTOP
1997injection).
1998A design bug is that this can race with concurrent
1999.BR SIGSTOP s.
2000Another complication is that the tracee may enter other ptrace-stops
2001and needs to be restarted and waited for again, until
2002.B SIGSTOP
2003is seen.
2004Yet another complication is to be sure that
2005the tracee is not already ptrace-stopped,
2006because no signal delivery happens while it is\(emnot even
2007.BR SIGSTOP .
3b1fdaf3
MK
2008.\" FIXME Describe how to detach from a group-stopped tracee so that it
2009.\" doesn't run, but continues to wait for SIGCONT.
dd3568a1 2010.PP
181f997f 2011If the tracer dies, all tracees are automatically detached and restarted,
8b20acd1 2012unless they were in group-stop.
b8d02d56
MK
2013Handling of restart from group-stop is currently buggy,
2014but the "as planned" behavior is to leave tracee stopped and waiting for
181f997f
MK
2015.BR SIGCONT .
2016If the tracee is restarted from signal-delivery-stop,
2017the pending signal is injected.
2018.SS execve(2) under ptrace
cb729171 2019.\" clone(2) CLONE_THREAD says:
181f997f
MK
2020.\" If any of the threads in a thread group performs an execve(2),
2021.\" then all threads other than the thread group leader are terminated,
d6e37473 2022.\" and the new program is executed in the thread group leader.
181f997f 2023.\"
8898a252 2024When one thread in a multithreaded process calls
181f997f
MK
2025.BR execve (2),
2026the kernel destroys all other threads in the process,
2027.\" In kernel 3.1 sources, see fs/exec.c::de_thread()
2028and resets the thread ID of the execing thread to the
2029thread group ID (process ID).
181f997f
MK
2030(Or, to put things another way, when a multithreaded process does an
2031.BR execve (2),
8898a252 2032at completion of the call, it appears as though the
181f997f
MK
2033.BR execve (2)
2034occurred in the thread group leader, regardless of which thread did the
2035.BR execve (2).)
181f997f
MK
2036This resetting of the thread ID looks very confusing to tracers:
2037.IP * 3
2038All other threads stop in
8898a252 2039.B PTRACE_EVENT_EXIT
b8d02d56 2040stop, if the
8898a252
MK
2041.BR PTRACE_O_TRACEEXIT
2042option was turned on.
181f997f
MK
2043Then all other threads except the thread group leader report
2044death as if they exited via
2045.BR _exit (2)
2046with exit code 0.
b8d02d56 2047.IP *
181f997f
MK
2048The execing tracee changes its thread ID while it is in the
2049.BR execve (2).
2050(Remember, under ptrace, the "pid" returned from
2051.BR waitpid (2),
2052or fed into ptrace calls, is the tracee's thread ID.)
2053That is, the tracee's thread ID is reset to be the same as its process ID,
2054which is the same as the thread group leader's thread ID.
2055.IP *
f098951d
DV
2056Then a
2057.B PTRACE_EVENT_EXEC
2058stop happens, if the
2059.BR PTRACE_O_TRACEEXEC
2060option was turned on.
2061.IP *
2062If the thread group leader has reported its
2063.B PTRACE_EVENT_EXIT
2064stop by this time,
181f997f
MK
2065it appears to the tracer that
2066the dead thread leader "reappears from nowhere".
a17e05c5 2067(Note: the thread group leader does not report death via
f098951d
DV
2068.I WIFEXITED(status)
2069until there is at least one other live thread.
a17e05c5 2070This eliminates the possibility that the tracer will see
f098951d 2071it dying and then reappearing.)
181f997f
MK
2072If the thread group leader was still alive,
2073for the tracer this may look as if thread group leader
2074returns from a different system call than it entered,
2075or even "returned from a system call even though
2076it was not in any system call".
2077If the thread group leader was not traced
2078(or was traced by a different tracer), then during
2079.BR execve (2)
2080it will appear as if it has become a tracee of
2081the tracer of the execing tracee.
dd3568a1 2082.PP
181f997f
MK
2083All of the above effects are the artifacts of
2084the thread ID change in the tracee.
dd3568a1 2085.PP
181f997f
MK
2086The
2087.B PTRACE_O_TRACEEXEC
2088option is the recommended tool for dealing with this situation.
b8d02d56 2089First, it enables
a5c725cf
DP
2090.BR PTRACE_EVENT_EXEC
2091stop,
b8d02d56 2092which occurs before
a5c725cf 2093.BR execve (2)
b8d02d56
MK
2094returns.
2095In this stop, the tracer can use
2096.B PTRACE_GETEVENTMSG
2097to retrieve the tracee's former thread ID.
94e66ffd 2098(This feature was introduced in Linux 3.0.)
b8d02d56
MK
2099Second, the
2100.B PTRACE_O_TRACEEXEC
2101option disables legacy
2102.B SIGTRAP
2103generation on
2104.BR execve (2).
dd3568a1 2105.PP
181f997f
MK
2106When the tracer receives
2107.B PTRACE_EVENT_EXEC
2108stop notification,
2109it is guaranteed that except this tracee and the thread group leader,
2110no other threads from the process are alive.
dd3568a1 2111.PP
181f997f
MK
2112On receiving the
2113.B PTRACE_EVENT_EXEC
2114stop notification,
2115the tracer should clean up all its internal
2116data structures describing the threads of this process,
2117and retain only one data structure\(emone which
2118describes the single still running tracee, with
efeece04 2119.PP
f098951d 2120 thread ID == thread group ID == process ID.
dd3568a1 2121.PP
181f997f
MK
2122Example: two threads call
2123.BR execve (2)
2124at the same time:
dd3568a1 2125.PP
4d12a715 2126.nf
a5c725cf 2127*** we get syscall-enter-stop in thread 1: **
4d12a715
DV
2128PID1 execve("/bin/foo", "foo" <unfinished ...>
2129*** we issue PTRACE_SYSCALL for thread 1 **
a5c725cf 2130*** we get syscall-enter-stop in thread 2: **
4d12a715
DV
2131PID2 execve("/bin/bar", "bar" <unfinished ...>
2132*** we issue PTRACE_SYSCALL for thread 2 **
2133*** we get PTRACE_EVENT_EXEC for PID0, we issue PTRACE_SYSCALL **
2134*** we get syscall-exit-stop for PID0: **
2135PID0 <... execve resumed> ) = 0
2136.fi
dd3568a1 2137.PP
181f997f
MK
2138If the
2139.B PTRACE_O_TRACEEXEC
2140option is
2141.I not
28e2ca57 2142in effect for the execing tracee,
53cdec41 2143and if the tracee was
28e2ca57
DV
2144.BR PTRACE_ATTACH ed
2145rather that
2146.BR PTRACE_SEIZE d,
2147the kernel delivers an extra
181f997f
MK
2148.B SIGTRAP
2149to the tracee after
2150.BR execve (2)
8b20acd1
MK
2151returns.
2152This is an ordinary signal (similar to one which can be
181f997f
MK
2153generated by
2154.IR "kill -TRAP" ),
2155not a special kind of ptrace-stop.
2156Employing
2157.B PTRACE_GETSIGINFO
2158for this signal returns
2159.I si_code
2160set to 0
2161.RI ( SI_USER ).
2162This signal may be blocked by signal mask,
2163and thus may be delivered (much) later.
dd3568a1 2164.PP
181f997f
MK
2165Usually, the tracer (for example,
2166.BR strace (1))
2167would not want to show this extra post-execve
2168.B SIGTRAP
2169signal to the user, and would suppress its delivery to the tracee (if
2170.B SIGTRAP
2171is set to
2172.BR SIG_DFL ,
2173it is a killing signal).
d6e37473 2174However, determining
181f997f
MK
2175.I which
2176.B SIGTRAP
2177to suppress is not easy.
2178Setting the
2179.B PTRACE_O_TRACEEXEC
28e2ca57
DV
2180option or using
2181.B PTRACE_SEIZE
2182and thus suppressing this extra
181f997f
MK
2183.B SIGTRAP
2184is the recommended approach.
4d12a715 2185.SS Real parent
181f997f
MK
2186The ptrace API (ab)uses the standard UNIX parent/child signaling over
2187.BR waitpid (2).
2188This used to cause the real parent of the process to stop receiving
2189several kinds of
2190.BR waitpid (2)
2191notifications when the child process is traced by some other process.
dd3568a1 2192.PP
181f997f
MK
2193Many of these bugs have been fixed, but as of Linux 2.6.38 several still
2194exist; see BUGS below.
dd3568a1 2195.PP
181f997f
MK
2196As of Linux 2.6.38, the following is believed to work correctly:
2197.IP * 3
dc85ba7c
MK
2198exit/death by signal is reported first to the tracer, then,
2199when the tracer consumes the
181f997f
MK
2200.BR waitpid (2)
2201result, to the real parent (to the real parent only when the
2202whole multithreaded process exits).
181f997f
MK
2203If the tracer and the real parent are the same process,
2204the report is sent only once.
47297adb 2205.SH RETURN VALUE
051ec121 2206On success, the
78686915 2207.B PTRACE_PEEK*
051ec121 2208requests return the requested data (but see NOTES),
e7a758e3
JH
2209the
2210.B PTRACE_SECCOMP_GET_FILTER
2211request returns the number of instructions in the BPF program, and
2212other requests return zero.
dd3568a1 2213.PP
2b2581ee
MK
2214On error, all requests return \-1, and
2215.I errno
2216is set appropriately.
8bd58774 2217Since the value returned by a successful
0daa9e92 2218.B PTRACE_PEEK*
181f997f 2219request may be \-1, the caller must clear
2b2581ee 2220.I errno
181f997f
MK
2221before the call, and then check it afterward
2222to determine whether or not an error occurred.
2b2581ee
MK
2223.SH ERRORS
2224.TP
2225.B EBUSY
181f997f 2226(i386 only) There was an error with allocating or freeing a debug register.
2b2581ee
MK
2227.TP
2228.B EFAULT
2229There was an attempt to read from or write to an invalid area in
181f997f 2230the tracer's or the tracee's memory,
2b2581ee
MK
2231probably because the area wasn't mapped or accessible.
2232Unfortunately, under Linux, different variations of this fault
2f0af33b
MK
2233will return
2234.B EIO
2235or
2236.B EFAULT
2237more or less arbitrarily.
2b2581ee
MK
2238.TP
2239.B EINVAL
2240An attempt was made to set an invalid option.
2241.TP
2242.B EIO
181f997f
MK
2243.I request
2244is invalid, or an attempt was made to read from or
2245write to an invalid area in the tracer's or the tracee's memory,
2b2581ee
MK
2246or there was a word-alignment violation,
2247or an invalid signal was specified during a restart request.
2248.TP
2249.B EPERM
2250The specified process cannot be traced.
2251This could be because the
4d12a715 2252tracer has insufficient privileges (the required capability is
2b2581ee 2253.BR CAP_SYS_PTRACE );
00b08db3 2254unprivileged processes cannot trace processes that they
2b2581ee
MK
2255cannot send signals to or those running
2256set-user-ID/set-group-ID programs, for obvious reasons.
181f997f
MK
2257Alternatively, the process may already be being traced,
2258or (on kernels before 2.6.26) be
e8906093 2259.BR init (1)
2b2581ee
MK
2260(PID 1).
2261.TP
2262.B ESRCH
2263The specified process does not exist, or is not currently being traced
181f997f
MK
2264by the caller, or is not stopped
2265(for requests that require a stopped tracee).
47297adb 2266.SH CONFORMING TO
44a2c328 2267SVr4, 4.3BSD.
fea681da
MK
2268.SH NOTES
2269Although arguments to
e511ffb6 2270.BR ptrace ()
c13182ef 2271are interpreted according to the prototype given,
5260fe08 2272glibc currently declares
e511ffb6 2273.BR ptrace ()
181f997f
MK
2274as a variadic function with only the
2275.I request
2276argument fixed.
ca302d0e
DV
2277It is recommended to always supply four arguments,
2278even if the requested operation does not use them,
2279setting unused/ignored arguments to
2280.I 0L
2281or
2282.IR "(void\ *)\ 0".
dd3568a1 2283.PP
181f997f
MK
2284In Linux kernels before 2.6.26,
2285.\" See commit 00cd5c37afd5f431ac186dd131705048c0a11fdb
e8906093 2286.BR init (1),
181f997f 2287the process with PID 1, may not be traced.
dd3568a1 2288.PP
674f11ec
JH
2289A tracees parent continues to be the tracer even if that tracer calls
2290.BR execve (2).
dd3568a1 2291.PP
181f997f
MK
2292The layout of the contents of memory and the USER area are
2293quite operating-system- and architecture-specific.
8660aec0
MK
2294The offset supplied, and the data returned,
2295might not entirely match with the definition of
2296.IR "struct user" .
2297.\" See http://lkml.org/lkml/2008/5/8/375
dd3568a1 2298.PP
181f997f 2299The size of a "word" is determined by the operating-system variant
3e18f289 2300(e.g., for 32-bit Linux it is 32 bits).
dd3568a1 2301.PP
fea681da 2302This page documents the way the
e511ffb6 2303.BR ptrace ()
c13182ef 2304call works currently in Linux.
07318a59 2305Its behavior differs significantly on other flavors of UNIX.
e63ad01d 2306In any case, use of
e511ffb6 2307.BR ptrace ()
181f997f 2308is highly specific to the operating system and architecture.
4978c606 2309.\"
ace93363
MK
2310.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2311.\"
2312.SS Ptrace access mode checking
2313Various parts of the kernel-user-space API (not just
bf7bc8b8 2314.BR ptrace ()
00172d8d
MK
2315operations), require so-called "ptrace access mode" checks,
2316whose outcome determines whether an operation is permitted
2317(or, in a few cases, causes a "read" operation to return sanitized data).
2318These checks are performed in cases where one process can
2319inspect sensitive information about,
2320or in some cases modify the state of, another process.
2321The checks are based on factors such as the credentials and capabilities
2322of the two processes,
2323whether or not the "target" process is dumpable,
2324and the results of checks performed by any enabled Linux Security Module
2325(LSM)\(emfor example, SELinux, Yama, or Smack\(emand by the commoncap LSM
611d3ac4 2326(which is always invoked).
efeece04 2327.PP
be26fa86 2328Prior to Linux 2.6.27, all access checks were of a single type.
ace93363
MK
2329Since Linux 2.6.27,
2330.\" commit 006ebb40d3d65338bd74abb03b945f8d60e362bd
2331two access mode levels are distinguished:
2332.TP
2333.BR PTRACE_MODE_READ
2334For "read" operations or other operations that are less dangerous,
2335such as:
2336.BR get_robust_list (2);
2337.BR kcmp (2);
2338reading
2339.IR /proc/[pid]/auxv ,
2340.IR /proc/[pid]/environ ,
2341or
2342.IR /proc/[pid]/stat ;
2343or
2344.BR readlink (2)
2345of a
2346.IR /proc/[pid]/ns/*
2347file.
2348.TP
2349.BR PTRACE_MODE_ATTACH
2350For "write" operations, or other operations that are more dangerous,
2351such as: ptrace attaching
2352.RB ( PTRACE_ATTACH )
2353to another process
2354or calling
2355.BR process_vm_writev (2).
2356.RB ( PTRACE_MODE_ATTACH
2357was effectively the default before Linux 2.6.27.)
bcd0d82d
MK
2358.\"
2359.\" Regarding the above description of the distinction between
2360.\" PTRACE_MODE_READ and PTRACE_MODE_ATTACH, Stephen Smalley notes:
2361.\"
2362.\" That was the intent when the distinction was introduced, but it doesn't
2363.\" appear to have been properly maintained, e.g. there is now a common
2364.\" helper lock_trace() that is used for
2365.\" /proc/pid/{stack,syscall,personality} but checks PTRACE_MODE_ATTACH, and
2366.\" PTRACE_MODE_ATTACH is also used in timerslack_ns_write/show(). Likely
2367.\" should review and make them consistent. There was also some debate
2368.\" about proper handling of /proc/pid/fd. Arguably that one might belong
2369.\" back in the _ATTACH camp.
2370.\"
ace93363
MK
2371.PP
2372Since Linux 4.5,
2373.\" commit caaee6234d05a58c5b4d05e7bf766131b810a657
611d3ac4 2374the above access mode checks are combined (ORed) with
ace93363
MK
2375one of the following modifiers:
2376.TP
2377.B PTRACE_MODE_FSCREDS
2378Use the caller's filesystem UID and GID (see
2379.BR credentials (7))
2380or effective capabilities for LSM checks.
2381.TP
2382.B PTRACE_MODE_REALCREDS
2383Use the caller's real UID and GID or permitted capabilities for LSM checks.
2384This was effectively the default before Linux 4.5.
2385.PP
2386Because combining one of the credential modifiers with one of
2387the aforementioned access modes is typical,
2388some macros are defined in the kernel sources for the combinations:
2389.TP
2390.B PTRACE_MODE_READ_FSCREDS
2391Defined as
2392.BR "PTRACE_MODE_READ | PTRACE_MODE_FSCREDS" .
2393.TP
2394.B PTRACE_MODE_READ_REALCREDS
2395Defined as
2396.BR "PTRACE_MODE_READ | PTRACE_MODE_REALCREDS" .
2397.TP
2398.B PTRACE_MODE_ATTACH_FSCREDS
2399Defined as
2400.BR "PTRACE_MODE_ATTACH | PTRACE_MODE_FSCREDS" .
2401.TP
2402.B PTRACE_MODE_ATTACH_REALCREDS
2403Defined as
2404.BR "PTRACE_MODE_ATTACH | PTRACE_MODE_REALCREDS" .
ace93363
MK
2405.PP
2406One further modifier can be ORed with the access mode:
2407.TP
2408.BR PTRACE_MODE_NOAUDIT " (since Linux 3.3)"
2409.\" commit 69f594a38967f4540ce7a29b3fd214e68a8330bd
2410.\" Just for /proc/pid/stat
2411Don't audit this access mode check.
3cd161fe
SS
2412This modifier is employed for ptrace access mode checks
2413(such as checks when reading
2414.IR /proc/[pid]/stat )
2415that merely cause the output to be filtered or sanitized,
2416rather than causing an error to be returned to the caller.
2417In these cases, accessing the file is not a security violation and
2418there is no reason to generate a security audit record.
2419This modifier suppresses the generation of
2420such an audit record for the particular access check.
ace93363 2421.PP
edb73684
MK
2422Note that all of the
2423.BR PTRACE_MODE_*
2424constants described in this subsection are kernel-internal,
2425and not visible to user space.
2426The constant names are mentioned here in order to label the various kinds of
2427ptrace access mode checks that are performed for various system calls
2428and accesses to various pseudofiles (e.g., under
2429.IR /proc ).
32245813 2430These names are used in other manual pages to provide a simple
edb73684 2431shorthand for labeling the different kernel checks.
efeece04 2432.PP
ace93363
MK
2433The algorithm employed for ptrace access mode checking determines whether
2434the calling process is allowed to perform the corresponding action
a330bffa
MK
2435on the target process.
2436(In the case of opening
2437.IR /proc/[pid]
2438files, the "calling process" is the one opening the file,
2439and the process with the corresponding PID is the "target process".)
2440The algorithm is as follows:
9edaeefb 2441.IP 1. 3
ace93363
MK
2442If the calling thread and the target thread are in the same
2443thread group, access is always allowed.
2444.IP 2.
2445If the access mode specifies
2446.BR PTRACE_MODE_FSCREDS ,
78f07865
MK
2447then, for the check in the next step,
2448employ the caller's filesystem UID and GID.
2449(As noted in
2450.BR credentials (7),
2451the filesystem UID and GID almost always have the same values
2452as the corresponding effective IDs.)
efeece04 2453.IP
78f07865 2454Otherwise, the access mode specifies
ace93363 2455.BR PTRACE_MODE_REALCREDS ,
78f07865
MK
2456so use the caller's real UID and GID for the checks in the next step.
2457(Most APIs that check the caller's UID and GID use the effective IDs.
2458For historical reasons, the
2459.BR PTRACE_MODE_REALCREDS
2460check uses the real IDs instead.)
ace93363
MK
2461.IP 3.
2462Deny access if
2463.I neither
2464of the following is true:
2465.RS
2466.IP \(bu 2
2467The real, effective, and saved-set user IDs of the target
2468match the caller's user ID,
2469.IR and
2470the real, effective, and saved-set group IDs of the target
2471match the caller's group ID.
2472.IP \(bu
2473The caller has the
2474.B CAP_SYS_PTRACE
0647331a 2475capability in the user namespace of the target.
ace93363
MK
2476.RE
2477.IP 4.
2478Deny access if the target process "dumpable" attribute has a value other than 1
2479.RB ( SUID_DUMP_USER ;
2480see the discussion of
2481.BR PR_SET_DUMPABLE
2482in
2483.BR prctl (2)),
2484and the caller does not have the
2485.BR CAP_SYS_PTRACE
2486capability in the user namespace of the target process.
2487.IP 5.
2488The kernel LSM
2489.IR security_ptrace_access_check ()
2490interface is invoked to see if ptrace access is permitted.
b0459842 2491The results depend on the LSM(s).
611d3ac4 2492The implementation of this interface in the commoncap LSM performs
ace93363
MK
2493the following steps:
2494.\" (in cap_ptrace_access_check()):
2495.RS
2496.IP a) 3
2497If the access mode includes
2498.BR PTRACE_MODE_FSCREDS ,
2499then use the caller's
2500.I effective
2501capability set
2502in the following check;
2503otherwise (the access mode specifies
2504.BR PTRACE_MODE_REALCREDS ,
2505so) use the caller's
2506.I permitted
2507capability set.
2508.IP b)
2509Deny access if
2510.I neither
2511of the following is true:
2512.RS
2513.IP \(bu 2
0647331a
MK
2514The caller and the target process are in the same user namespace,
2515and the caller's capabilities are a proper superset of the target process's
ace93363
MK
2516.I permitted
2517capabilities.
2518.IP \(bu
2519The caller has the
2520.B CAP_SYS_PTRACE
2521capability in the target process's user namespace.
2522.RE
2523.IP
611d3ac4 2524Note that the commoncap LSM does not distinguish between
ace93363
MK
2525.B PTRACE_MODE_READ
2526and
2527.BR PTRACE_MODE_ATTACH .
2528.RE
2529.IP 6.
2530If access has not been denied by any of the preceding steps,
2531then access is allowed.
2532.\"
2533.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2534.\"
4978c606 2535.SS /proc/sys/kernel/yama/ptrace_scope
e5323616
MK
2536On systems with the Yama Linux Security Module (LSM) installed
2537(i.e., the kernel was configured with
2538.BR CONFIG_SECURITY_YAMA ),
2539the
4978c606 2540.I /proc/sys/kernel/yama/ptrace_scope
94b0464c 2541file (available since Linux 3.4)
4978c606
MK
2542.\" commit 2d514487faf188938a4ee4fb3464eeecfbdcf8eb
2543can be used to restrict the ability to trace a process with
bf7bc8b8 2544.BR ptrace ()
4978c606
MK
2545(and thus also the ability to use tools such as
2546.BR strace (1)
2547and
2548.BR gdb (1)).
2549The goal of such restrictions is to prevent attack escalation whereby
2550a compromised process can ptrace-attach to other sensitive processes
2551(e.g., a GPG agent or an SSH session) owned by the user in order
028b5760
MK
2552to gain additional credentials that may exist in memory
2553and thus expand the scope of the attack.
efeece04 2554.PP
e5323616
MK
2555More precisely, the Yama LSM limits two types of operations:
2556.IP * 3
2557Any operation that performs a ptrace access mode
2558.BR PTRACE_MODE_ATTACH
2559check\(emfor example,
2560.BR ptrace ()
2561.BR PTRACE_ATTACH .
2562(See the "Ptrace access mode checking" discussion above.)
efeece04 2563.IP
e5323616
MK
2564.IP *
2565.BR ptrace ()
2566.BR PTRACE_TRACEME .
2567.PP
2568A process that has the
4978c606 2569.B CAP_SYS_PTRACE
e5323616
MK
2570capability can update the
2571.IR /proc/sys/kernel/yama/ptrace_scope
2572file with one of the following values:
4978c606
MK
2573.TP
25740 ("classic ptrace permissions")
e5323616
MK
2575No additional restrictions on operations that perform
2576.BR PTRACE_MODE_ATTACH
2577checks (beyond those imposed by the commoncap and other LSMs).
efeece04 2578.IP
4978c606
MK
2579The use of
2580.BR PTRACE_TRACEME
2581is unchanged.
2582.TP
e5323616
MK
25831 ("restricted ptrace") [default value]
2584When performing an operation that requires a
2585.BR PTRACE_MODE_ATTACH
d5765e27
MK
2586check, the calling process must either have the
2587.B CAP_SYS_PTRACE
2588capability in the user namespace of the target process or
e48ed83a 2589it must have a predefined relationship with the target process.
4978c606 2590By default,
e5323616 2591the predefined relationship is that the target process
028b5760 2592must be a descendant of the caller.
efeece04 2593.IP
e5323616 2594A target process can employ the
4978c606
MK
2595.BR prctl (2)
2596.B PR_SET_PTRACER
028b5760 2597operation to declare an additional PID that is allowed to perform
e5323616
MK
2598.BR PTRACE_MODE_ATTACH
2599operations on the target.
2600See the kernel source file
6744a500
ES
2601.IR Documentation/admin\-guide/LSM/Yama.rst
2602.\" commit 90bb766440f2147486a2acc3e793d7b8348b0c22
2603(or
4978c606 2604.IR Documentation/security/Yama.txt
6744a500 2605before Linux 4.13)
e5323616 2606for further details.
efeece04 2607.IP
4978c606
MK
2608The use of
2609.BR PTRACE_TRACEME
2610is unchanged.
2611.TP
26122 ("admin-only attach")
2613Only processes with the
2614.B CAP_SYS_PTRACE
d5765e27 2615capability in the user namespace of the target process may perform
e5323616
MK
2616.BR PTRACE_MODE_ATTACH
2617operations or trace children that employ
4978c606
MK
2618.BR PTRACE_TRACEME .
2619.TP
26203 ("no attach")
e5323616
MK
2621No process may perform
2622.BR PTRACE_MODE_ATTACH
2623operations or trace children that employ
4978c606 2624.BR PTRACE_TRACEME .
efeece04 2625.IP
4978c606 2626Once this value has been written to the file, it cannot be changed.
d5765e27
MK
2627.PP
2628With respect to values 1 and 2,
028b5760
MK
2629note that creating a new user namespace effectively removes the
2630protection offered by Yama.
2631This is because a process in the parent user namespace whose effective
2632UID matches the UID of the creator of a child namespace
2633has all capabilities (including
2634.BR CAP_SYS_PTRACE )
2635when performing operations within the child user namespace
2636(and further-removed descendants of that namespace).
2637Consequently, when a process tries to use user namespaces to sandbox itself,
2638it inadvertently weakens the protections offered by the Yama LSM.
4978c606 2639.\"
e5323616
MK
2640.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2641.\"
0722a578 2642.SS C library/kernel differences
53a99749
MK
2643At the system call level, the
2644.BR PTRACE_PEEKTEXT ,
2645.BR PTRACE_PEEKDATA ,
2646and
2647.BR PTRACE_PEEKUSER
2648requests have a different API: they store the result
2649at the address specified by the
2650.I data
2651parameter, and the return value is the error flag.
2652The glibc wrapper function provides the API given in DESCRIPTION above,
2653with the result being returned via the function return value.
a1d5f77c 2654.SH BUGS
8bd58774 2655On hosts with 2.6 kernel headers,
0daa9e92 2656.B PTRACE_SETOPTIONS
181f997f
MK
2657is declared with a different value than the one for 2.4.
2658This leads to applications compiled with 2.6 kernel
a1d5f77c 2659headers failing when run on 2.4 kernels.
8bd58774 2660This can be worked around by redefining
0daa9e92 2661.B PTRACE_SETOPTIONS
8bd58774
MK
2662to
2663.BR PTRACE_OLDSETOPTIONS ,
2664if that is defined.
dd3568a1 2665.PP
181f997f 2666Group-stop notifications are sent to the tracer, but not to real parent.
4d12a715 2667Last confirmed on 2.6.38.6.
dd3568a1 2668.PP
181f997f
MK
2669If a thread group leader is traced and exits by calling
2670.BR _exit (2),
8898a252
MK
2671.\" Note from Denys Vlasenko:
2672.\" Here "exits" means any kind of death - _exit, exit_group,
2673.\" signal death. Signal death and exit_group cases are trivial,
2674.\" though: since signal death and exit_group kill all other threads
2675.\" too, "until all other threads exit" thing happens rather soon
2676.\" in these cases. Therefore, only _exit presents observably
2677.\" puzzling behavior to ptrace users: thread leader _exit's,
2678.\" but WIFEXITED isn't reported! We are trying to explain here
2679.\" why it is so.
181f997f
MK
2680a
2681.B PTRACE_EVENT_EXIT
2682stop will happen for it (if requested), but the subsequent
2683.B WIFEXITED
2684notification will not be delivered until all other threads exit.
2685As explained above, if one of other threads calls
2686.BR execve (2),
2687the death of the thread group leader will
2688.I never
2689be reported.
2690If the execed thread is not traced by this tracer,
2691the tracer will never know that
2692.BR execve (2)
4d12a715 2693happened.
181f997f
MK
2694One possible workaround is to
2695.B PTRACE_DETACH
2696the thread group leader instead of restarting it in this case.
2697Last confirmed on 2.6.38.6.
bea08fec 2698.\" FIXME . need to test/verify this scenario
dd3568a1 2699.PP
181f997f
MK
2700A
2701.B SIGKILL
2702signal may still cause a
2703.B PTRACE_EVENT_EXIT
2704stop before actual signal death.
2705This may be changed in the future;
2706.B SIGKILL
2707is meant to always immediately kill tasks even under ptrace.
55bd9495 2708Last confirmed on Linux 3.13.
dd3568a1 2709.PP
a17e05c5 2710Some system calls return with
f098951d 2711.B EINTR
a17e05c5
MK
2712if a signal was sent to a tracee, but delivery was suppressed by the tracer.
2713(This is very typical operation: it is usually
f098951d 2714done by debuggers on every attach, in order to not introduce
a17e05c5
MK
2715a bogus
2716.BR SIGSTOP ).
2717As of Linux 3.2.9, the following system calls are affected
2718(this list is likely incomplete):
f098951d 2719.BR epoll_wait (2),
a17e05c5 2720and
f098951d 2721.BR read (2)
a17e05c5
MK
2722from an
2723.BR inotify (7)
2724file descriptor.
ca302d0e
DV
2725The usual symptom of this bug is that when you attach to
2726a quiescent process with the command
efeece04 2727.PP
408731d4
MK
2728.in +4n
2729.EX
2730strace \-p <process-ID>
2731.EE
2732.in
efeece04 2733.PP
ca302d0e
DV
2734then, instead of the usual
2735and expected one-line output such as
408731d4
MK
2736.PP
2737.in +4n
2738.EX
2739restart_syscall(<... resuming interrupted call ...>_
2740.EE
2741.in
2742.PP
ca302d0e 2743or
408731d4
MK
2744.PP
2745.in +4n
2746.EX
2747select(6, [5], NULL, [5], NULL_
2748.EE
2749.in
2750.PP
ca302d0e
DV
2751('_' denotes the cursor position), you observe more than one line.
2752For example:
408731d4
MK
2753.PP
2754.in +4n
2755.EX
ca302d0e
DV
2756 clock_gettime(CLOCK_MONOTONIC, {15370, 690928118}) = 0
2757 epoll_wait(4,_
408731d4
MK
2758.EE
2759.in
2760.PP
ca302d0e
DV
2761What is not visible here is that the process was blocked in
2762.BR epoll_wait (2)
2763before
2764.BR strace (1)
2765has attached to it.
2766Attaching caused
2767.BR epoll_wait (2)
7fac88a9 2768to return to user space with the error
ca302d0e
DV
2769.BR EINTR .
2770In this particular case, the program reacted to
2771.B EINTR
b0b1d9b5 2772by checking the current time, and then executing
ca302d0e
DV
2773.BR epoll_wait (2)
2774again.
2775(Programs which do not expect such "stray"
2776.BR EINTR
2777errors may behave in an unintended way upon an
2778.BR strace (1)
2779attach.)
47297adb 2780.SH SEE ALSO
fea681da 2781.BR gdb (1),
53506ea9 2782.BR ltrace (1),
fea681da 2783.BR strace (1),
181f997f 2784.BR clone (2),
fea681da
MK
2785.BR execve (2),
2786.BR fork (2),
181f997f 2787.BR gettid (2),
d901e325 2788.BR prctl (2),
3b4a59c4 2789.BR seccomp (2),
181f997f
MK
2790.BR sigaction (2),
2791.BR tgkill (2),
2792.BR vfork (2),
2793.BR waitpid (2),
fea681da 2794.BR exec (3),
181f997f
MK
2795.BR capabilities (7),
2796.BR signal (7)