linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Catalin Marinas <catalin.marinas@arm.com>
To: David Long <dave.long@linaro.org>
Cc: "Marc Zyngier" <marc.zyngier@arm.com>,
	"Huang Shijie" <shijie.huang@arm.com>,
	"James Morse" <james.morse@arm.com>,
	"Pratyush Anand" <panand@redhat.com>,
	"Sandeepa Prabhu" <sandeepa.s.prabhu@gmail.com>,
	"Will Deacon" <will.deacon@arm.com>,
	"William Cohen" <wcohen@redhat.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	"Steve Capper" <steve.capper@linaro.org>,
	"Masami Hiramatsu" <mhiramat@kernel.org>,
	"Li Bin" <huawei.libin@huawei.com>,
	"Jisheng Zhang" <jszhang@marvell.com>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"Daniel Thompson" <daniel.thompson@linaro.org>,
	"Vladimir Murzin" <Vladimir.Murzin@arm.com>,
	"Petr Mladek" <pmladek@suse.com>,
	"Ard Biesheuvel" <ard.biesheuvel@linaro.org>,
	"Jens Wiklander" <jens.wiklander@linaro.org>,
	"Robin Murphy" <robin.murphy@arm.com>,
	"Mark Brown" <broonie@kernel.org>,
	"Suzuki K Poulose" <suzuki.poulose@arm.com>,
	"Dave P Martin" <Dave.Martin@arm.com>,
	"Andrey Ryabinin" <ryabinin.a.a@gmail.com>,
	"yalin wang" <yalin.wang2010@gmail.com>,
	"Yang Shi" <yang.shi@linaro.org>,
	"Zi Shen Lim" <zlim.lnx@gmail.com>,
	"John Blackwood" <john.blackwood@ccur.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Adam Buchbinder" <adam.buchbinder@gmail.com>,
	"Christoffer Dall" <christoffer.dall@linaro.org>
Subject: Re: [PATCH v15 04/10] arm64: Kprobes with single stepping support
Date: Fri, 22 Jul 2016 11:16:17 +0100	[thread overview]
Message-ID: <20160722101617.GA17821@e104818-lin.cambridge.arm.com> (raw)
In-Reply-To: <57911590.50305@linaro.org>

On Thu, Jul 21, 2016 at 02:33:52PM -0400, David Long wrote:
> On 07/21/2016 01:23 PM, Marc Zyngier wrote:
> >On 21/07/16 17:33, David Long wrote:
> >>On 07/20/2016 12:09 PM, Marc Zyngier wrote:
> >>>On 08/07/16 17:35, David Long wrote:
> >>>>+#define MAX_INSN_SIZE			1
> >>>>+#define MAX_STACK_SIZE			128
> >>>
> >>>Where is that value coming from? Because even on my 6502, I have a 256
> >>>byte stack.
> >>>
> >>
> >>Although I don't claim to know the original author's thoughts I would
> >>guess it is based on the seven other existing implementations for
> >>kprobes on various architectures, all of which appear to use either 64
> >>or 128 for MAX_STACK_SIZE.  The code is not trying to duplicate the
> >>whole stack.
[...]
> >My main worry is that whatever value you pick, it is always going to be
> >wrong. This is used to preserve arguments that are passed on the stack,
> >as opposed to passed by registers). We have no idea of what is getting
> >passed there so saving nothing, 128 bytes or 2kB is about the same. It
> >is always wrong.
> >
> >A much better solution would be to check the frame pointer, and copy the
> >delta between FP and SP, assuming it fits inside the allocated buffer.
> >If it doesn't, or if FP is invalid, we just skip the hook, because we
> >can't reliably execute it.
> 
> Well, this is the way it works literally everywhere else. It is a documented
> limitation (Documentation/kprobes.txt). Said documentation may need to be
> changed along with the suggested fix.

The document states: "Up to MAX_STACK_SIZE bytes are copied". That means
the arch code could always copy less but never more than MAX_STACK_SIZE.
What we are proposing is that we should try to guess how much to copy
based on the FP value (caller's frame) and, if larger than
MAX_STACK_SIZE, skip the probe hook entirely. I don't think this goes
against the kprobes.txt document but at least it (a) may improve the
performance slightly by avoiding unnecessary copy and (b) it avoids
undefined behaviour if we ever encounter a jprobe with arguments passed
on the stack beyond MAX_STACK_SIZE.

-- 
Catalin

  reply	other threads:[~2016-07-22 10:16 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-08 16:35 [PATCH v15 00/10] arm64: Add kernel probes (kprobes) support David Long
2016-07-08 16:35 ` [PATCH v15 01/10] arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature David Long
2016-07-15 10:57   ` Catalin Marinas
2016-07-15 14:51     ` David Long
2016-07-15 15:13       ` Catalin Marinas
2016-07-15 17:51         ` David Long
2016-07-19 14:17           ` Catalin Marinas
2016-07-08 16:35 ` [PATCH v15 02/10] arm64: Add more test functions to insn.c David Long
2016-07-08 16:35 ` [PATCH v15 03/10] arm64: add conditional instruction simulation support David Long
2016-07-08 16:35 ` [PATCH v15 04/10] arm64: Kprobes with single stepping support David Long
2016-07-20  9:36   ` Marc Zyngier
2016-07-20 11:16     ` Catalin Marinas
2016-07-20 19:08     ` David Long
2016-07-21  8:44       ` Marc Zyngier
2016-07-20 15:49   ` Catalin Marinas
2016-07-21 14:50     ` David Long
2016-07-20 16:09   ` Marc Zyngier
2016-07-20 16:28     ` Catalin Marinas
2016-07-20 16:31       ` Marc Zyngier
2016-07-20 16:46       ` Marc Zyngier
2016-07-20 17:04         ` Catalin Marinas
2016-07-21 16:33     ` David Long
2016-07-21 17:16       ` Catalin Marinas
2016-07-21 17:23       ` Marc Zyngier
2016-07-21 18:33         ` David Long
2016-07-22 10:16           ` Catalin Marinas [this message]
2016-07-22 15:51             ` David Long
2016-07-25 17:13               ` Catalin Marinas
2016-07-25 22:27                 ` David Long
2016-07-27 11:50                   ` Daniel Thompson
2016-07-27 22:13                     ` David Long
2016-07-28 14:40                       ` Catalin Marinas
2016-07-29  9:01                         ` Daniel Thompson
2016-08-04  4:47                           ` David Long
2016-08-08 11:13                             ` Daniel Thompson
2016-08-08 14:29                               ` David Long
2016-08-08 22:49                                 ` Masami Hiramatsu
2016-08-09 17:23                                 ` Catalin Marinas
2016-08-10 20:41                                   ` David Long
2016-08-08 22:19                             ` Masami Hiramatsu
2016-07-26  9:50                 ` Daniel Thompson
2016-07-26 16:55                   ` Catalin Marinas
2016-07-27 10:01                     ` Dave Martin
2016-07-26 17:54                   ` Mark Rutland
2016-07-27 11:19                     ` Daniel Thompson
2016-07-27 11:38                       ` Dave Martin
2016-07-27 11:42                         ` Daniel Thompson
2016-07-27 13:38                       ` Mark Rutland
2016-07-08 16:35 ` [PATCH v15 05/10] arm64: Blacklist non-kprobe-able symbol David Long
2016-07-08 16:35 ` [PATCH v15 06/10] arm64: Treat all entry code as non-kprobe-able David Long
2016-07-15 16:47   ` Catalin Marinas
2016-07-19  0:53     ` David Long
2016-07-08 16:35 ` [PATCH v15 07/10] arm64: kprobes instruction simulation support David Long
2016-07-10 22:51   ` Paul Gortmaker
2016-07-08 16:35 ` [PATCH v15 08/10] arm64: Add trampoline code for kretprobes David Long
2016-07-19 13:46   ` Catalin Marinas
2016-07-20 18:28     ` David Long
2016-07-08 16:35 ` [PATCH v15 09/10] arm64: Add kernel return probes support (kretprobes) David Long
2016-07-08 16:35 ` [PATCH v15 10/10] kprobes: Add arm64 case in kprobe example module David Long
2016-07-14 16:22 ` [PATCH v15 00/10] arm64: Add kernel probes (kprobes) support Catalin Marinas
2016-07-14 17:09   ` William Cohen
2016-07-15  7:50     ` Catalin Marinas
2016-07-15  8:01       ` Marc Zyngier
2016-07-15  8:59         ` Alex Bennée
2016-07-15  9:04           ` Marc Zyngier
2016-07-15  9:53           ` Marc Zyngier
2016-07-14 17:56   ` David Long
2016-07-19 13:57   ` Catalin Marinas
2016-07-19 14:01     ` David Long
2016-07-19 18:27 ` Catalin Marinas
2016-07-19 19:38   ` David Long

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=20160722101617.GA17821@e104818-lin.cambridge.arm.com \
    --to=catalin.marinas@arm.com \
    --cc=Dave.Martin@arm.com \
    --cc=Vladimir.Murzin@arm.com \
    --cc=adam.buchbinder@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=alex.bennee@linaro.org \
    --cc=ard.biesheuvel@linaro.org \
    --cc=broonie@kernel.org \
    --cc=christoffer.dall@linaro.org \
    --cc=daniel.thompson@linaro.org \
    --cc=dave.long@linaro.org \
    --cc=huawei.libin@huawei.com \
    --cc=james.morse@arm.com \
    --cc=jens.wiklander@linaro.org \
    --cc=john.blackwood@ccur.com \
    --cc=jszhang@marvell.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marc.zyngier@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=mhiramat@kernel.org \
    --cc=panand@redhat.com \
    --cc=pmladek@suse.com \
    --cc=robin.murphy@arm.com \
    --cc=ryabinin.a.a@gmail.com \
    --cc=sandeepa.s.prabhu@gmail.com \
    --cc=shijie.huang@arm.com \
    --cc=steve.capper@linaro.org \
    --cc=suzuki.poulose@arm.com \
    --cc=wcohen@redhat.com \
    --cc=will.deacon@arm.com \
    --cc=yalin.wang2010@gmail.com \
    --cc=yang.shi@linaro.org \
    --cc=zlim.lnx@gmail.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).