linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Will Deacon <will.deacon@arm.com>
To: David Long <dave.long@linaro.org>
Cc: "linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	Russell King <linux@arm.linux.org.uk>,
	Sandeepa Prabhu <sandeepa.prabhu@linaro.org>,
	William Cohen <wcohen@redhat.com>,
	Catalin Marinas <Catalin.Marinas@arm.com>,
	"Jon Medhurst (Tixy)" <tixy@linaro.org>,
	Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
	Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
	Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 1/5] arm64: Kprobes with single stepping support
Date: Tue, 18 Nov 2014 14:56:44 +0000	[thread overview]
Message-ID: <20141118145643.GO18842@arm.com> (raw)
In-Reply-To: <1416292375-29560-2-git-send-email-dave.long@linaro.org>

Hello,

On Tue, Nov 18, 2014 at 06:32:51AM +0000, David Long wrote:
> From: Sandeepa Prabhu <sandeepa.prabhu@linaro.org>
> 
> Add support for basic kernel probes(kprobes) and jump probes
> (jprobes) for ARM64.
> 
> Kprobes will utilize software breakpoint and single step debug
> exceptions supported on ARM v8.
> 
> software breakpoint is placed at the probe address to trap the
> kernel execution into kprobe handler.
> 
> ARM v8 support single stepping to be enabled while exception return
> (ERET) with next PC in exception return address (ELR_EL1).
> kprobe handler prepares a executable memory slot for out-of-line
> execution with the copy of the original instruction under probe, and
> enable single stepping from the instruction slot. With this scheme,
> the instruction is executed with the exact same register context
> 'except PC' that points to instruction slot.
> 
> Debug mask(PSTATE.D) is enabled only when single stepping a recursive
> kprobes i.e. during kprobes reenter so that probes instruction can be
> single stepped within the kprobe handler -exception- context.
> The recursion depth of kprobe is always 2, i.e. upon probe re-entry,
> any further re-entry is prevented by not calling handlers and the case
> counted as missed kprobe)
> 
> Single stepping from slot has drawback on PC-relative accesses
> like branching and symbolic literals access as offset from new PC
> (slot address) may not be ensured to fit in immediate value of
> opcode, Such instructions needs simulation, so reject
> probing such instructions.
> 
> Instructions generating exceptions or cpu mode change are rejected,
> and not allowed to insert probe for these instructions.
> 
> Instructions using Exclusive Monitor are rejected right too.
> 
> System instructions are mostly enabled for stepping, except MSR
> immediate that update "daif" flags in PSTATE, which are not safe
> for probing -rejected.

One thing I noticed looking through this patch is that we're effectively
reinventing a bunch of the instruction decoding logic that we already have
in the kernel (introduced since Sandeepa last sent his patch).

Could you take a look at include/asm/insn.h and kernel/insn.c please, and
see if you can at least consolidate some of this? Some of it should be easy
(i.e. reusing masks, using existing #defines to construct BRK encodings),
but I appreciate there may be places where kprobes needs to add extra bits,
in which case I'd really like to keep this all together if at all possible.

We're currently in a position where the module loader, BPF jit, ftrace and
the proposed alternative patching scheme are all using the same instruction
manipulation functions, so we should try to continue that trend if we can.

Thanks,

Will

  parent reply	other threads:[~2014-11-18 14:56 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-18  6:32 [PATCH v3 0/5] ARM64: Add kernel probes(Kprobes) support David Long
2014-11-18  6:32 ` [PATCH v3 1/5] arm64: Kprobes with single stepping support David Long
2014-11-18 13:28   ` Jon Medhurst (Tixy)
2014-11-21  4:28     ` David Long
2014-11-18 14:38   ` William Cohen
2014-11-18 14:39   ` William Cohen
2014-11-18 14:56   ` Will Deacon [this message]
2014-11-19 11:21     ` Sandeepa Prabhu
2014-11-19 11:25       ` Will Deacon
2014-11-19 14:55         ` David Long
2014-11-20  5:10           ` Sandeepa Prabhu
2014-11-26  6:46           ` David Long
2014-11-26 10:09             ` Will Deacon
2014-12-22 10:10   ` Pratyush Anand
2014-11-18  6:32 ` [PATCH v3 2/5] arm64: Kprobes instruction simulation support David Long
2014-11-18 14:43   ` William Cohen
2014-11-18  6:32 ` [PATCH v3 3/5] arm64: Add kernel return probes support(kretprobes) David Long
2014-11-18 14:50   ` William Cohen
2014-11-18  6:32 ` [PATCH v3 4/5] kprobes: Add arm64 case in kprobe example module David Long
2014-11-18  6:32 ` [PATCH v3 5/5] arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature David Long
2014-11-18 14:52   ` Will Deacon
2014-11-20  7:20     ` Masami Hiramatsu
2014-11-21  6:16     ` David Long
2014-11-20 15:02 ` [PATCH v3 0/5] ARM64: Add kernel probes(Kprobes) support Steve Capper
2014-11-26  8:33   ` Masami Hiramatsu
2014-11-26 10:03     ` Steve Capper
2014-11-26 17:46       ` David Long
2014-11-26 18:59         ` Steve Capper
2014-11-27  6:07           ` Masami Hiramatsu
2014-11-28 16:01             ` Steve Capper
2014-12-01  9:37               ` Masami Hiramatsu
2014-12-02 19:27                 ` William Cohen
2014-12-02 20:00                   ` William Cohen
2014-12-03  3:36                   ` Masami Hiramatsu
2014-12-03 14:54                 ` William Cohen
2014-12-03 22:54                   ` David Long
2014-12-04  0:02                     ` David Long
2014-12-04  1:16                     ` William Cohen
2014-12-04  2:48                       ` David Long
2014-12-04 10:21                         ` Steve Capper
2014-12-04 10:43                           ` Masami Hiramatsu
2014-12-04 11:29                             ` Steve Capper
2014-12-04 11:53                               ` Masami Hiramatsu
2014-12-09 13:33                                 ` Steve Capper
2014-12-09 14:27                                   ` David Long
2014-12-10 16:38                                     ` Steve Capper
2014-12-12 22:42                                       ` David Long
2014-12-12 23:10                                         ` Steve Capper
2014-12-15  5:58                                           ` Masami Hiramatsu
2014-12-15  6:29                                           ` David Long
2014-12-05  5:08                       ` William Cohen
2014-11-27  5:13       ` Masami Hiramatsu

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=20141118145643.GO18842@arm.com \
    --to=will.deacon@arm.com \
    --cc=Catalin.Marinas@arm.com \
    --cc=ananth@in.ibm.com \
    --cc=anil.s.keshavamurthy@intel.com \
    --cc=dave.long@linaro.org \
    --cc=davem@davemloft.net \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=sandeepa.prabhu@linaro.org \
    --cc=tixy@linaro.org \
    --cc=wcohen@redhat.com \
    /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).