From: Masami Hiramatsu <mhiramat@kernel.org>
To: Oleg Nesterov <oleg@redhat.com>
Cc: Andy Lutomirski <luto@kernel.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
LKML <linux-kernel@vger.kernel.org>,
Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>,
"David S. Miller" <davem@davemloft.net>, X86 ML <x86@kernel.org>,
Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: Why do kprobes and uprobes singlestep?
Date: Tue, 2 Mar 2021 11:22:24 +0900 [thread overview]
Message-ID: <20210302112224.6b3568434be490fbfbdec790@kernel.org> (raw)
In-Reply-To: <20210301165130.GA5351@redhat.com>
Hi Oleg and Andy,
On Mon, 1 Mar 2021 17:51:31 +0100
Oleg Nesterov <oleg@redhat.com> wrote:
> Hi Andy,
>
> sorry for delay.
>
> On 02/23, Andy Lutomirski wrote:
> >
> > A while back, I let myself be convinced that kprobes genuinely need to
> > single-step the kernel on occasion, and I decided that this sucked but
> > I could live with it. it would, however, be Really Really Nice (tm)
> > if we could have a rule that anyone running x86 Linux who single-steps
> > the kernel (e.g. kgdb and nothing else) gets to keep all the pieces
> > when the system falls apart around them. Specifically, if we don't
> > allow kernel single-stepping and if we suitably limit kernel
> > instruction breakpoints (the latter isn't actually a major problem),
> > then we don't really really need to use IRET to return to the kernel,
> > and that means we can avoid some massive NMI nastiness.
>
> Not sure I understand you correctly, I know almost nothing about low-level
> x86 magic.
x86 has normal interrupt and NMI. When an NMI occurs the CPU masks NMI
(the mask itself is hidden status) and IRET releases the mask. The problem
is that if an INT3 is hit in the NMI handler and does a single-stepping,
it has to use IRET for atomically setting TF and return.
>
> But I guess this has nothing to do with uprobes, they do not single-step
> in kernel mode, right?
Agreed, if the problematic case is IRET from NMI handler, uprobes doesn't
hit because it only invoked from user-space.
Andy, what would you think?
> > Uprobes seem to single-step user code for no discernable reason.
> > (They want to trap after executing an out of line instruction, AFAICT.
> > Surely INT3 or even CALL after the out-of-line insn would work as well
> > or better.)
>
> Uprobes use single-step from the very beginning, probably because this
> is the most simple and "standard" way to implement xol.
>
> And please note that CALL/JMP/etc emulation was added much later to fix the
> problems with non-canonical addresses, and this emulation it still incomplete.
Yeah, I found another implementation of the emulation afterwards. Of cource
since uprobes only treat user-space, it maybe need more care.
Thank you,
--
Masami Hiramatsu <mhiramat@kernel.org>
next prev parent reply other threads:[~2021-03-02 7:48 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-23 23:24 Andy Lutomirski
2021-02-24 1:17 ` Masami Hiramatsu
2021-02-24 19:45 ` Andy Lutomirski
2021-02-25 2:22 ` Masami Hiramatsu
2021-02-25 6:03 ` Andy Lutomirski
2021-02-25 9:11 ` Masami Hiramatsu
2021-03-01 14:08 ` [RFC PATCH 0/1] x86/kprobes: Remoev single-step trap from x86 kprobes Masami Hiramatsu
2021-03-01 14:08 ` [RFC PATCH 1/1] x86/kprobes: Use int3 instead of debug trap for single-step Masami Hiramatsu
2021-03-02 8:06 ` Peter Zijlstra
2021-03-02 8:38 ` Peter Zijlstra
2021-03-02 8:41 ` Peter Zijlstra
2021-03-02 8:54 ` Peter Zijlstra
2021-03-02 12:51 ` Masami Hiramatsu
2021-03-02 13:58 ` Peter Zijlstra
2021-03-02 15:25 ` [PATCH -tip 0/3] x86/kprobes: Remoev single-step trap from x86 kprobes Masami Hiramatsu
2021-03-02 15:25 ` [PATCH -tip 1/3] x86/kprobes: Retrieve correct opcode for group instruction Masami Hiramatsu
2021-03-23 15:15 ` [tip: x86/core] " tip-bot2 for Masami Hiramatsu
2021-03-02 15:25 ` [PATCH -tip 2/3] x86/kprobes: Identify far indirect JMP correctly Masami Hiramatsu
2021-03-23 15:15 ` [tip: x86/core] " tip-bot2 for Masami Hiramatsu
2021-03-02 15:25 ` [PATCH -tip 3/3] x86/kprobes: Use int3 instead of debug trap for single-step Masami Hiramatsu
2021-03-23 15:15 ` [tip: x86/core] " tip-bot2 for Masami Hiramatsu
2021-03-17 14:55 ` [PATCH -tip 0/3] x86/kprobes: Remoev single-step trap from x86 kprobes Masami Hiramatsu
2021-03-17 16:26 ` Peter Zijlstra
2021-03-17 17:45 ` Andy Lutomirski
2021-02-25 9:59 ` Why do kprobes and uprobes singlestep? Peter Zijlstra
2021-03-01 16:51 ` Oleg Nesterov
2021-03-02 1:36 ` Andy Lutomirski
2021-03-02 20:24 ` Alexei Starovoitov
2021-03-02 21:02 ` Andy Lutomirski
2021-03-03 1:22 ` Alexei Starovoitov
2021-03-03 1:46 ` Andy Lutomirski
2021-03-03 2:18 ` Alexei Starovoitov
2021-03-03 13:27 ` Oleg Nesterov
2021-03-03 18:11 ` Daniel Xu
2021-03-03 19:14 ` Andy Lutomirski
2021-03-02 20:25 ` Oleg Nesterov
2021-03-02 20:35 ` Andy Lutomirski
2021-03-02 20:28 ` Oleg Nesterov
2021-03-02 2:22 ` Masami Hiramatsu [this message]
2021-03-02 2:48 ` Andy Lutomirski
2021-03-02 20:31 ` Oleg Nesterov
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=20210302112224.6b3568434be490fbfbdec790@kernel.org \
--to=mhiramat@kernel.org \
--cc=andrew.cooper3@citrix.com \
--cc=anil.s.keshavamurthy@intel.com \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=x86@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®