From: Will Deacon <will.deacon@arm.com>
To: Sandeepa Prabhu <sandeepa.prabhu@linaro.org>
Cc: "linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"patches@linaro.org" <patches@linaro.org>,
"linaro-kernel@lists.linaro.org" <linaro-kernel@lists.linaro.org>,
Catalin Marinas <Catalin.Marinas@arm.com>,
"steve.capper@linaro.org" <steve.capper@linaro.org>,
"nico@linaro.org" <nico@linaro.org>,
"srikar@linux.vnet.ibm.com" <srikar@linux.vnet.ibm.com>,
"rostedt@goodmis.org" <rostedt@goodmis.org>,
"masami.hiramatsu.pt@hitachi.com"
<masami.hiramatsu.pt@hitachi.com>,
"dsaxena@linaro.org" <dsaxena@linaro.org>,
"Vijaya.Kumar@caviumnetworks.com"
<Vijaya.Kumar@caviumnetworks.com>, Jiang Liu <liuj97@gmail.com>
Subject: Re: [PATCH RFC 2/6] arm64: Kprobes with single stepping support
Date: Mon, 11 Nov 2013 11:21:10 +0000 [thread overview]
Message-ID: <20131111112110.GD28302@mudshark.cambridge.arm.com> (raw)
In-Reply-To: <CA+b37P2Yt8Hb_fgtLfw56DO=ZGC0LxVkxJHftHdxa45HQTXJcQ@mail.gmail.com>
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:
> >> diff --git a/arch/arm64/include/asm/kprobes.h b/arch/arm64/include/asm/kprobes.h
> >> new file mode 100644
> >> index 0000000..9b491d0
> >> --- /dev/null
> >> +++ b/arch/arm64/include/asm/kprobes.h
> >> @@ -0,0 +1,59 @@
> >> +/*
> >> + * arch/arm64/include/asm/kprobes.h
> >> + *
> >> + * Copyright (C) 2013 Linaro Limited
> >> + *
> >> + * This program is free software; you can redistribute it and/or modify
> >> + * it under the terms of the GNU General Public License version 2 as
> >> + * published by the Free Software Foundation.
> >> + *
> >> + * This program is distributed in the hope that it will be useful,
> >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> >> + * General Public License for more details.
> >> + */
> >> +
> >> +#ifndef _ARM_KPROBES_H
> >> +#define _ARM_KPROBES_H
> >> +
> >> +#include <linux/types.h>
> >> +#include <linux/ptrace.h>
> >> +#include <linux/percpu.h>
> >> +
> >> +#define __ARCH_WANT_KPROBES_INSN_SLOT
> >> +#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.
> >> +DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL;
> >> +DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);
> >> +
> >> +static void __kprobes arch_prepare_ss_slot(struct kprobe *p)
> >> +{
> >> + int i;
> >> + /* prepare insn slot */
> >> + p->ainsn.insn[0] = p->opcode;
> >> + /* NOP for superscalar uArch decode */
> >
> > superscalar uArch?
> well, the comment needs refining, what we mean is that one NOP should
> follow the instruction in memory slot, for the decode stage(not to hit
> undefined instruction).
Is this undef related to your comment above?
> > 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.
> >
> > In fact, how do you avoid a race with hardware breakpoints? E.g., somebody
> > places a hardware breakpoint on an instruction in the kernel for which
> > kprobes has patched in a brk. We take the hardware breakpoint, disable the
> > breakpoint and set up a single step before returning to the brk. The brk
> > then traps, but we must take care not to disable single-step and/or unmask
> > debug exceptions, because that will cause the hardware breakpoint code to
> > re-arm its breakpoint before we've stepped off the brk instruction.
> Not sure if kprobes can work together with hardware breakpoint or kgdb
> when multiple breakpoints (h/w and s/w) are placed on same text
> address. How arm32 and x86 handle this kind of scenario?
ARM doesn't support kernel hw breakpoints due to various limitations (we
don't have hw single step in ARMv7).
> Probably, the person debugging hardware breakpoint or kgdb should have
> control over the flow and disable kprobes (sysfs interface available)?
That sounds like a bit of a cop-out. I'd rather we understand the situation
and, if necessary, add code so that we can deny use of kprobes if kgdb is
active (or something similar) if we can't get the subsystems to collaborate.
Will
next prev parent reply other threads:[~2013-11-11 11:21 UTC|newest]
Thread overview: 50+ 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
2013-11-13 6:55 ` Sandeepa Prabhu
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 [this message]
2013-11-12 6:52 ` Sandeepa Prabhu
2013-11-15 16:37 ` Will Deacon
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=20131111112110.GD28302@mudshark.cambridge.arm.com \
--to=will.deacon@arm.com \
--cc=Catalin.Marinas@arm.com \
--cc=Vijaya.Kumar@caviumnetworks.com \
--cc=dsaxena@linaro.org \
--cc=linaro-kernel@lists.linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=liuj97@gmail.com \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=nico@linaro.org \
--cc=patches@linaro.org \
--cc=rostedt@goodmis.org \
--cc=sandeepa.prabhu@linaro.org \
--cc=srikar@linux.vnet.ibm.com \
--cc=steve.capper@linaro.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).