From: Oleg Nesterov <oleg@redhat.com>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Eugene Syromiatnikov <esyr@redhat.com>,
Jan Kratochvil <jan.kratochvil@redhat.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Michael Kerrisk <mtk.manpages@gmail.com>,
Pedro Alves <palves@redhat.com>,
Simon Marchi <simon.marchi@efficios.com>,
linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH] ptrace: make ptrace() fail if the tracee changed its pid unexpectedly
Date: Fri, 18 Dec 2020 15:10:33 +0100 [thread overview]
Message-ID: <20201218141032.GA20989@redhat.com> (raw)
In-Reply-To: <875z50roia.fsf@x220.int.ebiederm.org>
On 12/17, Eric W. Biederman wrote:
>
> Oleg Nesterov <oleg@redhat.com> writes:
>
> > Suppose we have 2 threads, the group-leader L and a sub-theread T,
> > both parked in ptrace_stop(). Debugger tries to resume both threads
> > and does
> >
> > ptrace(PTRACE_CONT, T);
> > ptrace(PTRACE_CONT, L);
> >
> > If the sub-thread T execs in between, the 2nd PTRACE_CONT doesn not
> > resume the old leader L, it resumes the post-exec thread T which was
> > actually now stopped in PTHREAD_EVENT_EXEC. In this case the
> > PTHREAD_EVENT_EXEC event is lost, and the tracer can't know that the
> > tracee changed its pid.
>
> The change seems sensible. I don't expect this is common but it looks
> painful to deal with if it happens.
Yes, this is not a bug, but gdb can't handle this case without some help
from the kernel.
> Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
Thanks!
> I am wondering if this should be expanded to all ptrace types for
> consistency. Or maybe we should set a flag to make this happen for
> all ptrace events.
But for what? ptrace is the very old API, I don't think we want to
suddenly enforce the rule that every reported event must be wait()'ed.
Plus this needs some complications to support WNOWAIT.
I would like to kill JOBCTL_TRAPPING_BIT which ensures that the tracer
does NOT need wait() after PTRACE_ATTACH(stopped-task) (see
wait_on_bit() in ptrace_attach()). I think this makes no sense but
who knows, perhaps even this change can break something.
> It just seems really odd to only worry about missing this event.
Agreed,
> I admit this a threaded PTRACE_EVENT_EXEC is the only event we are
> likely to miss but still.
Yes, this is the only event debugger can miss even if it uses wait()
correctly.
> Do you by any chance have any debugger/strace test cases?
>
> I would think that would be the way to test to see if this breaks
> anything. I think I remember strace having a good test suite.
Heh. You can never know what other people do with ptrace ;)
For example, see
fab840fc2d54 ptrace: PTRACE_DETACH should do flush_ptrace_hw_breakpoint(child)
35114fcbe0b9 Revert "ptrace: PTRACE_DETACH should do flush_ptrace_hw_breakpoint(child)"
Oleg.
next prev parent reply other threads:[~2020-12-18 14:12 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-17 14:29 [RFC PATCH] ptrace: make ptrace() fail if the tracee changed its pid unexpectedly Oleg Nesterov
2020-12-17 23:39 ` Eric W. Biederman
2020-12-18 14:10 ` Oleg Nesterov [this message]
2020-12-21 20:04 ` Eric W. Biederman
2020-12-19 16:19 ` Pedro Alves
2020-12-19 19:33 ` Oleg Nesterov
2020-12-20 4:48 ` Simon Marchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201218141032.GA20989@redhat.com \
--to=oleg@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=ebiederm@xmission.com \
--cc=esyr@redhat.com \
--cc=jan.kratochvil@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mtk.manpages@gmail.com \
--cc=palves@redhat.com \
--cc=simon.marchi@efficios.com \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.