[PATCH] ptrace.2: Improve clarity for multi-threaded tracers
From: Niklas HambÃchen
Date: Sun Feb 17 2019 - 11:34:53 EST
Until now, the man page said:
Attachment and subsequent commands are per thread:
in a multiâ threaded process, every thread can be individually attached to a
(potentially different) tracer, or left not attached and thus not debugged.
Therefore, "tracee" always means "(one) thread", never "a (possibly
While the first sentence "Attachment ... [is] per thread" might be interpreted
as holding for both tracer and tracee, the rest talks only about the
multi-threadedness of the *tracee*, leaving some uncertainty in the reader on
whether the tracer may issue `ptrace()` from different threads.
This patch adds more explicitness, removing any doubt.
* LKML thread https://marc.info/?l=linux-kernel&m=155036848808748&w=2
"ptrace() with multithreaded tracer"
where I asked about this behaviour, in case anybody disagrees with my
where the previous ambiguity of the man page confused some users, and where
and example program is given that confirms the behaviour I mention in this
* A program of mine, in which I have independently confirmed that using
`ptrace()` from a thread that's not the tracer thread (a sibling thread in
the process is the tracer instead) results in `ESRCH`
where the comment on `ptrace_check_attach()` talks about `%current`, which
is a thread
Signed-off-by: Niklas HambÃchen <mail@xxxxxx>
man2/ptrace.2 | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/man2/ptrace.2 b/man2/ptrace.2
index 3b6b6ea84..4058abe94 100644
@@ -122,12 +122,18 @@ It is primarily used to implement breakpoint debugging and system
A tracee first needs to be attached to the tracer.
-Attachment and subsequent commands are per thread:
-in a multithreaded process,
+Attachment and subsequent commands are per thread,
+on both the tracer and tracee side.
+Issuing a tracing command from a thread that is not the tracer of the given
+will result in an
+In a multithreaded process to be traced,
every thread can be individually attached to a
(potentially different) tracer,
or left not attached and thus not debugged.
-Therefore, "tracee" always means "(one) thread",
+Therefore, "tracer" or "tracee" always mean "(one) thread",
never "a (possibly multithreaded) process".
Ptrace commands are always sent to
a specific tracee using a call of the form
@@ -2259,7 +2265,7 @@ or (on kernels before 2.6.26) be
The specified process does not exist, or is not currently being traced
-by the caller, or is not stopped
+by the calling thread, or is not stopped
(for requests that require a stopped tracee).
.SH CONFORMING TO