From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH RFC 2/6] arm64: Kprobes with single stepping support
Date: Fri, 15 Nov 2013 16:37:18 +0000 [thread overview]
Message-ID: <20131115163718.GH19468@mudshark.cambridge.arm.com> (raw)
In-Reply-To: <CA+b37P1REzXJabkiNEc5Ji+n6p02PfuSdaPrb-k4P25kgfkLNQ@mail.gmail.com>
On Tue, Nov 12, 2013 at 06:52:51AM +0000, Sandeepa Prabhu wrote:
> On 11 November 2013 16:51, Will Deacon <will.deacon@arm.com> wrote:
> > On Mon, Nov 11, 2013 at 05:35:37AM +0000, Sandeepa Prabhu wrote:
> >> On 8 November 2013 22:26, Will Deacon <will.deacon@arm.com> wrote:
> >> >> +#define MAX_INSN_SIZE 2
> >> >
> >> > Why is this 2?
> >> Second entry is to hold NOP instruction, absence of it cause abort
> >> while instruction decode.
> >
> > Hmm, can you elaborate please? I'm not sure why you should get an abort
> > decoding kernel addresses.
> well, kprobes does not step from kernel address, but it prepares a
> allocated memory(executable), copies the instruction and update the
> single step address (ELR) to enable stepping while ERET.
> So, don't we need NOP at next location after the instruction because
> next instruction will be in decode stage and might throw "undefined
> instruction" error?
You can't take speculative prefetch aborts like that, so unless you actually
go and *execute* garbage, you don't need that NOP. From the sounds of it, it's
not required, as long as you handle the step exception correctly.
> >> > NAK. Unmasking debug exceptions from within a debug exception is not safe.
> >> > I'd much rather we returned from handling this exception, then took whatever
> >> > other pending exception there was.
> >> well, kprobes needs recursive breakpoints to be handled, and I am not
> >> sure if this can be achieved other way than unmasking D-flag for a
> >> shorter duration where we can expect re-entry (I would check if this
> >> can be done without re-cursing)
> >> I want to understand why unmasking D-flag is unsafe here, kprobes make
> >> sure that recursion depth is only 2 (i.e. does not generate 3rd
> >> Breakpoint trap) and interrupts are kept masked while recursion/single
> >> stepping. Is it unsafe only if conflict with hardware breakpoint on
> >> same CPU?
> >
> > Is this recursion only to support setting kprobes on the kprobe
> > implementation? The problem is that the rest of the debug infrastructure is
> > not set up to deal with recursive exceptions, so allowing them can break
> > state machines maintained by code like hw_breakpoint.
> No, upon one kprobe hit for an address, the subsystem can call the
> user-defined handlers (pre- and -post) which can call same function
> again. Example, if we place kprobe on "printk" entry, and registered
> handler can invoke printk to print more info.
Hang on, I think I'm missing something here. If you run into a recursive
probe, you'll simply hit another BRK instruction, right? That should be
fine, since PSTATE.D doesn't mask software breakpoint exceptions. The
tricky part comes when you try to step over that guy, but you might be ok
if you clear PSTATE.D *only* while you step your single instruction that you
copied out to the buffer.
What do you think? I'd really like you to try testing something like:
1. Place a hardware breakpoint in the kernel
2. Place a kprobe on the same address
3. Place a kprobe somewhere in the pre- hook for the kprobe placed in (2)
then check that (a) we manage to get through that lot without locking up and
(b) each probe/breakpoint is hit exactly once.
> This will make kprobe to trigger again and re-enter, so the kprobe
> subsystem need to handle the 2nd instance first, and then return back
> to previous execution. D-flag is enabled only the duration when the
> pre- and post- handler are called, so they they can recurse and handle
> single stepping, after that, D-flag is kept disabled. I am yet to
> test the concurrency with hw_breakpoint, would update once I run these
> tests.
If you really want to support this, you need to do more than just clear the
D flag. Not only do you need to deal with hardware breakpoints, but also
things like scheduling... Assuming that the user-defined handlers can block,
then you run the risk of context-switching with the D-flag set, which
introduces a significant black-out period to kernel debugging. There are
also issues like returning to userspace with MDSCR_EL1.SS set because of a
context switch triggered by the pre- handler, resulting in a single-step
exception from userspace.
I reckon what I suggested above might work, but I'd like your input.
Will
next prev parent reply other threads:[~2013-11-15 16:37 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-17 11:17 [PATCH RFC v2 0/6] ARM64: Add kernel probes(Kprobes) support Sandeepa Prabhu
2013-10-17 11:17 ` [PATCH RFC v4 1/6] arm64: support single-step and breakpoint handler hooks Sandeepa Prabhu
2013-10-25 15:22 ` Will Deacon
2013-12-03 14:33 ` Sandeepa Prabhu
2013-12-03 19:44 ` Will Deacon
2013-10-17 11:17 ` [PATCH RFC 2/6] arm64: Kprobes with single stepping support Sandeepa Prabhu
2013-11-08 16:56 ` Will Deacon
2013-11-09 9:10 ` Masami Hiramatsu
2013-11-11 5:39 ` Sandeepa Prabhu
2013-11-11 7:54 ` Masami Hiramatsu
2013-11-11 10:51 ` Masami Hiramatsu
2013-11-11 10:58 ` Will Deacon
2013-11-11 17:32 ` Masami Hiramatsu
2013-11-12 6:23 ` Sandeepa Prabhu
2013-11-12 7:27 ` Masami Hiramatsu
2013-11-12 8:44 ` Sandeepa Prabhu
2013-11-12 10:17 ` Masami Hiramatsu
2013-11-12 10:55 ` Sandeepa Prabhu
2013-11-12 14:11 ` Masami Hiramatsu
2013-11-12 16:59 ` Steven Rostedt
2013-11-13 16:05 ` Masami Hiramatsu
[not found] ` <CA+b37P1sNsEXrJFfVL51sZ-SeGNCBiwXnOwCiFY8CBwSXPw+mQ@mail.gmail.com>
2013-11-13 7:08 ` Sandeepa Prabhu
2013-11-13 14:07 ` Masami Hiramatsu
2013-11-13 14:31 ` Will Deacon
2013-11-13 15:55 ` Sandeepa Prabhu
2013-11-15 16:39 ` Will Deacon
2013-11-18 6:55 ` Sandeepa Prabhu
2013-11-18 8:51 ` Sandeepa Prabhu
2013-11-13 13:58 ` Peter Zijlstra
2013-11-13 14:20 ` Will Deacon
2013-11-11 5:35 ` Sandeepa Prabhu
2013-11-11 11:21 ` Will Deacon
2013-11-12 6:52 ` Sandeepa Prabhu
2013-11-15 16:37 ` Will Deacon [this message]
2013-11-18 6:43 ` Sandeepa Prabhu
2013-10-17 11:17 ` [PATCH RFC 3/6] arm64: Kprobes instruction simulation support Sandeepa Prabhu
2013-11-08 17:03 ` Will Deacon
2013-11-11 5:58 ` Sandeepa Prabhu
2013-10-17 11:17 ` [PATCH RFC 4/6] arm64: Add kernel return probes support(kretprobes) Sandeepa Prabhu
2013-11-08 17:04 ` Will Deacon
2013-11-11 4:29 ` Sandeepa Prabhu
2013-11-11 7:53 ` AKASHI Takahiro
2013-11-11 8:55 ` Sandeepa Prabhu
2013-10-17 11:17 ` [PATCH RFC 5/6] arm64: Enable kprobes support for arm64 platform Sandeepa Prabhu
2013-10-17 11:17 ` [PATCH RFC 6/6] kprobes: Add cases for arm and arm64 in sample module Sandeepa Prabhu
2013-10-25 15:24 ` Will Deacon
2013-11-06 11:05 ` Sandeepa Prabhu
2013-10-18 8:32 ` [PATCH RFC v2 0/6] ARM64: Add kernel probes(Kprobes) support Masami Hiramatsu
2013-10-21 4:17 ` Sandeepa Prabhu
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=20131115163718.GH19468@mudshark.cambridge.arm.com \
--to=will.deacon@arm.com \
--cc=linux-arm-kernel@lists.infradead.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;
as well as URLs for NNTP newsgroup(s).