From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [EDT] [PATCH 1/1] Fix: hw watchpoint continually triggers callback
Date: Wed, 20 May 2015 19:02:17 +0100 [thread overview]
Message-ID: <20150520180217.GM11498@arm.com> (raw)
In-Reply-To: <939613287.351841431955025734.JavaMail.weblogic@ep2mlwas08c>
On Mon, May 18, 2015 at 02:17:05PM +0100, Vaneet Narang wrote:
> >Ok, so my first point shouldn't be a problem if we're just emulating the
> >instruction. However, I still think there are corner cases. For example,
> >imagine hitting a breakpoint on a ldr pc, [&foo] instruction where we've
> >also got a watchpoint on foo. Even with emulation, it's going to be
> >difficult to ensure that watchpoint is safely delivered.
> >
> >As I say, I'd really rather have a kprobes-agnostic way of stepping an
> >instruction and let the debugger decide whether it wants to use that or
> >not.
> >
>
> 2 breakpoints will not be any issue but watchpoint + breakpoint is
> interesting scenario with ldr pc, [&foo] instruction in place.
> How would ARM will behave in this case without kprobe ? I think It will
> keep on generating Watch point interrupt only.
It should work ok, because the mismatch breakpoint won't fire until we've
actually stepped off the faulting instruction.
> With kprobe watchpoint interrupt gets triggered first and as soon as we
> execute ldr pc, [&foo] using kprobe it will trigger Breakpoint interrupt.
> This can be taken care with special handling for such instruction where PC
> gets changed. Can you please suggest what should be correct behavior in
> this case ?
Ideally, kprobes wouldn't interfere with the any concurrent debugging, but
I suspect that's not actually the reality on any architectures, particularly
if we end up executing copies of instructions out of a kprobes buffer.
> Is this scenario possible with any other instruction. ? I am not able to
> think other instructions. Is it possisble with push or pop ?
Not sure, you'd need to check for anything that can access memory and
write the PC in one instruction.
> >> > - What if the debugger didn't want to execute the instruction at all?
> >>
> >> if debugger doesn't want to execute instruction then debugger should use
> >> single step implementation without overflow handler.
> >
> >But the debugger might want to use the overflow handler to regain control
> >on the exception (like ptrace does for userspace).
> >
> I have tried same kernel module on x86, Linux 3.5. Behavior on x86 is to
> execute instruction. I am not sure how ptrace works on x86, if
> instruction gets executed without any control from overflow handler.
> Behavior on ARM should be same as x86. Since perf API interface is same on
> ARM as well as x86.
Unfortunately, I don't think we can easily provide that illusion without
breaking ptrace. The proper fix would be to divorce hw_breakpoint from
perf, allowing ptrace to hook directly into the backend, but that's not
a simple task...
Will
WARNING: multiple messages have this Message-ID (diff)
From: Will Deacon <will.deacon@arm.com>
To: Vaneet Narang <v.narang@samsung.com>
Cc: Maninder Singh <maninder1.s@samsung.com>,
"linux@arm.linux.org.uk" <linux@arm.linux.org.uk>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Amit Arora <amit.arora@samsung.com>,
AJEET YADAV <ajeet.y@samsung.com>,
AKHILESH KUMAR <akhilesh.k@samsung.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [EDT] [PATCH 1/1] Fix: hw watchpoint continually triggers callback
Date: Wed, 20 May 2015 19:02:17 +0100 [thread overview]
Message-ID: <20150520180217.GM11498@arm.com> (raw)
In-Reply-To: <939613287.351841431955025734.JavaMail.weblogic@ep2mlwas08c>
On Mon, May 18, 2015 at 02:17:05PM +0100, Vaneet Narang wrote:
> >Ok, so my first point shouldn't be a problem if we're just emulating the
> >instruction. However, I still think there are corner cases. For example,
> >imagine hitting a breakpoint on a ldr pc, [&foo] instruction where we've
> >also got a watchpoint on foo. Even with emulation, it's going to be
> >difficult to ensure that watchpoint is safely delivered.
> >
> >As I say, I'd really rather have a kprobes-agnostic way of stepping an
> >instruction and let the debugger decide whether it wants to use that or
> >not.
> >
>
> 2 breakpoints will not be any issue but watchpoint + breakpoint is
> interesting scenario with ldr pc, [&foo] instruction in place.
> How would ARM will behave in this case without kprobe ? I think It will
> keep on generating Watch point interrupt only.
It should work ok, because the mismatch breakpoint won't fire until we've
actually stepped off the faulting instruction.
> With kprobe watchpoint interrupt gets triggered first and as soon as we
> execute ldr pc, [&foo] using kprobe it will trigger Breakpoint interrupt.
> This can be taken care with special handling for such instruction where PC
> gets changed. Can you please suggest what should be correct behavior in
> this case ?
Ideally, kprobes wouldn't interfere with the any concurrent debugging, but
I suspect that's not actually the reality on any architectures, particularly
if we end up executing copies of instructions out of a kprobes buffer.
> Is this scenario possible with any other instruction. ? I am not able to
> think other instructions. Is it possisble with push or pop ?
Not sure, you'd need to check for anything that can access memory and
write the PC in one instruction.
> >> > - What if the debugger didn't want to execute the instruction at all?
> >>
> >> if debugger doesn't want to execute instruction then debugger should use
> >> single step implementation without overflow handler.
> >
> >But the debugger might want to use the overflow handler to regain control
> >on the exception (like ptrace does for userspace).
> >
> I have tried same kernel module on x86, Linux 3.5. Behavior on x86 is to
> execute instruction. I am not sure how ptrace works on x86, if
> instruction gets executed without any control from overflow handler.
> Behavior on ARM should be same as x86. Since perf API interface is same on
> ARM as well as x86.
Unfortunately, I don't think we can easily provide that illusion without
breaking ptrace. The proper fix would be to divorce hw_breakpoint from
perf, allowing ptrace to hook directly into the backend, but that's not
a simple task...
Will
next prev parent reply other threads:[~2015-05-20 18:02 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-18 13:17 [EDT] [PATCH 1/1] Fix: hw watchpoint continually triggers callback Vaneet Narang
2015-05-20 18:02 ` Will Deacon [this message]
2015-05-20 18:02 ` Will Deacon
-- strict thread matches above, loose matches on Subject: below --
2015-05-13 5:14 Vaneet Narang
2015-05-13 16:04 ` Will Deacon
2015-05-13 16:04 ` Will Deacon
2015-05-12 11:48 Maninder Singh
2015-05-12 11:48 ` Maninder Singh
2015-05-12 12:45 ` Will Deacon
2015-05-12 12:45 ` Will Deacon
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=20150520180217.GM11498@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 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.