All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>
To: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Alexei Starovoitov <ast@kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Fenghua Yu <fenghua.yu@intel.com>,
	"H . Peter Anvin" <hpa@zytor.com>, Josef Bacik <jbacik@fb.com>,
	James Hogan <jhogan@kernel.org>,
	Laura Abbott <labbott@redhat.com>,
	Russell King <linux@armlinux.org.uk>,
	linux-kernel@vger.kernel.org, Ingo Molnar <mingo@kernel.org>,
	Ingo Molnar <mingo@redhat.com>,
	Ralf Baechle <ralf@linux-mips.org>,
	Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Tony Luck <tony.luck@intel.com>,
	Vineet Gupta <vgupta@synopsys.com>,
	Will Deacon <will.deacon@arm.com>,
	x86@kernel.org
Subject: Re: [PATCH -tip v4 24/27] bpf: error-inject: kprobes: Clear current_kprobe and enable preempt in kprobe
Date: Sat, 02 Jun 2018 17:28:05 +0530	[thread overview]
Message-ID: <1527937081.8b4s5988lk.naveen@linux.ibm.com> (raw)
In-Reply-To: <20180602083648.fc40ce260c2cafb9a0d31aaa@kernel.org>

Masami Hiramatsu wrote:
> On Thu, 31 May 2018 16:25:38 +0530
> "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> wrote:
> 
>> Masami Hiramatsu wrote:
>> > Clear current_kprobe and enable preemption in kprobe
>> > even if pre_handler returns !0.
>> > 
>> > This simplifies function override using kprobes.
>> > 
>> > Jprobe used to require to keep the preemption disabled and
>> > keep current_kprobe until it returned to original function
>> > entry. For this reason kprobe_int3_handler() and similar
>> > arch dependent kprobe handers checks pre_handler result
>> > and exit without enabling preemption if the result is !0.
>> > 
>> > After removing the jprobe, Kprobes does not need to
>> > keep preempt disabled even if user handler returns !0
>> > anymore.
>> 
>> I think the reason jprobes did it that way is to address architecture 
>> specific requirements when changing a function. So, without that 
>> infrastructure, I am not sure if we will be able to claim support for 
>> over-riding functions with kprobes. I am not sure if we want to claim 
>> that, but this is something we need to be clear on.
> 
> Really? as far as I can see, there seems no such architecture.
> The keeping preempt disabled is corresponding to keeping current_kprobe
> since the current_kprobe is per-cpu.

Right, and the reason for not resetting current_kprobe after kprobe 
handling is done is primarily for jprobes. 

> This means if it is preempted
> before hitting break_handler and changed cpu core, we missed to
> handle current_kprobe and goes to panic. But if we don't need
> such "break back" (removing break_handler), we don't need to
> keep current_kprobe (because it is not handled afterwards).

Agreed.

> 
> Anyway, changing function execution path is a "one-way" change.

This is the problem. With jprobes, over-riding a function was not a 
"one-way" change because it involves more than just changing the [n]ip.  
That is the reason we had setjmp/longjmp (aka break_handler).

> We don't have a chance to fixup that disabled preemption and current_kprobe
> after returning to the new function. So current error-inject clears
> current_kprobe and enable preemption before returning !0 from its
> kprobe pre_handler.
> 
> This is just moving such needless operation from user-pre_handler to
> kprobes itself. 
> 
>> For powerpc, the current function override in error-inject works fine 
>> since the new function does nothing. But, if anyone wants to do more 
>> work in the replacement function, it won't work with the current 
>> approach.
> 
> If you are considering about TOC change etc. yes, it depends on
> the archtecture. As far as I know IA64 and powerpc will not allow
> to support changing execution path without special care.
> Other "flat and simple" function call architectures like x86, arm
> can change execution path without special care. 

Yes, that's the concern. As I stated earlier, the only user seems to be 
error-injection where this is not a concern. I wanted this to be made 
clear.

I've since noticed that you are updating Documentation/kprobes.txt to 
make this clear in patch 24/27 in this series. So, I'm ok with the 
changes in this series.


Thanks,
Naveen

  reply	other threads:[~2018-06-02 11:58 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-28  6:59 [PATCH -tip v4 00/27] kprobes: Cleanup jprobe implementation Masami Hiramatsu
2018-05-28  6:59 ` Masami Hiramatsu
2018-05-28  6:59 ` [PATCH -tip v4 01/27] Documentation/kprobes: Fix to remove remaining jprobe Masami Hiramatsu
2018-05-28  6:59   ` Masami Hiramatsu
2018-05-28  7:00 ` [PATCH -tip v4 02/27] kprobes: Remove jprobe API implementation Masami Hiramatsu
2018-05-28  7:00   ` Masami Hiramatsu
2018-05-28  7:00 ` [PATCH -tip v4 03/27] kprobes/x86: Remove jprobe implementation Masami Hiramatsu
2018-05-28  7:00   ` Masami Hiramatsu
2018-05-28  7:01 ` [PATCH -tip v4 04/27] ARC: kprobes: " Masami Hiramatsu
2018-05-28  7:01   ` Masami Hiramatsu
2018-05-28  7:01 ` [PATCH -tip v4 05/27] ARM: kprobes: Remove jprobe arm implementation Masami Hiramatsu
2018-05-28  7:01   ` Masami Hiramatsu
2018-05-28  7:02 ` [PATCH -tip v4 06/27] arm64: kprobes: Remove jprobe implementation Masami Hiramatsu
2018-05-28  7:02   ` Masami Hiramatsu
2018-05-28  7:02 ` [PATCH -tip v4 07/27] powerpc/kprobes: Remove jprobe powerpc implementation Masami Hiramatsu
2018-05-28  7:02   ` Masami Hiramatsu
2018-05-28  7:03 ` [PATCH -tip v4 08/27] ia64: kprobes: Remove jprobe implementation Masami Hiramatsu
2018-05-28  7:03   ` Masami Hiramatsu
2018-05-28  7:03 ` [PATCH -tip v4 09/27] MIPS: " Masami Hiramatsu
2018-05-28  7:03   ` Masami Hiramatsu
2018-05-28  7:04 ` [PATCH -tip v4 10/27] s390/kprobes: " Masami Hiramatsu
2018-05-28  7:04   ` Masami Hiramatsu
2018-05-28  7:04 ` [PATCH -tip v4 11/27] sh: kprobes: " Masami Hiramatsu
2018-05-28  7:04   ` Masami Hiramatsu
2018-05-28  7:05 ` [PATCH -tip v4 12/27] sparc64: " Masami Hiramatsu
2018-05-28  7:05   ` Masami Hiramatsu
2018-05-28  7:05 ` [PATCH -tip v4 13/27] kprobes: Don't check the ->break_handler() in generic kprobes code Masami Hiramatsu
2018-05-28  7:05   ` Masami Hiramatsu
2018-05-28  7:06 ` [PATCH -tip v4 14/27] kprobes/x86: Don't call ->break_handler() in x86 kprobes Masami Hiramatsu
2018-05-28  7:06   ` Masami Hiramatsu
2018-05-28  7:06 ` [PATCH -tip v4 15/27] ARC: kprobes: Don't call the ->break_handler() in ARC kprobes code Masami Hiramatsu
2018-05-28  7:06   ` Masami Hiramatsu
2018-05-28  7:07 ` [PATCH -tip v4 16/27] ARM: kprobes: Don't call the ->break_handler() in arm " Masami Hiramatsu
2018-05-28  7:07   ` Masami Hiramatsu
2018-05-28  7:08 ` [PATCH -tip v4 17/27] arm64: " Masami Hiramatsu
2018-05-28  7:08   ` Masami Hiramatsu
2018-05-28  7:08 ` [PATCH -tip v4 18/27] powerpc/kprobes: " Masami Hiramatsu
2018-05-28  7:08   ` Masami Hiramatsu
2018-05-28  7:09 ` [PATCH -tip v4 19/27] ia64: kprobes: Don't call the ->break_handler() in ia64 " Masami Hiramatsu
2018-05-28  7:09   ` Masami Hiramatsu
2018-05-28  7:09 ` [PATCH -tip v4 20/27] MIPS: kprobes: Don't call the ->break_handler() in MIPS " Masami Hiramatsu
2018-05-28  7:09   ` Masami Hiramatsu
2018-05-28  7:10 ` [PATCH -tip v4 21/27] s390/kprobes: Don't call the ->break_handler() in s390 " Masami Hiramatsu
2018-05-28  7:10   ` Masami Hiramatsu
2018-05-28  7:10 ` [PATCH -tip v4 22/27] sh: kprobes: Don't call the ->break_handler() in SH " Masami Hiramatsu
2018-05-28  7:10   ` Masami Hiramatsu
2018-05-28  7:11 ` [PATCH -tip v4 23/27] sparc64: kprobes: Don't call the ->break_handler() in sparc64 " Masami Hiramatsu
2018-05-28  7:11   ` Masami Hiramatsu
2018-05-28  7:11 ` [PATCH -tip v4 24/27] bpf: error-inject: kprobes: Clear current_kprobe and enable preempt in kprobe Masami Hiramatsu
2018-05-28  7:11   ` Masami Hiramatsu
2018-05-31 10:55   ` Naveen N. Rao
2018-06-01 23:36     ` Masami Hiramatsu
2018-06-02 11:58       ` Naveen N. Rao [this message]
2018-06-04  9:08         ` Masami Hiramatsu
2018-05-28  7:12 ` [PATCH -tip v4 25/27] x86: kprobes: Do not disable preempt on int3 path Masami Hiramatsu
2018-05-28  7:12   ` Masami Hiramatsu
2018-05-28  7:12 ` [PATCH -tip v4 26/27] Documentation: kprobes: Add how to change the execution path Masami Hiramatsu
2018-05-28  7:12   ` Masami Hiramatsu
2018-05-28  7:13 ` [PATCH -tip v4 27/27] kprobes: Remove jprobe stub API Masami Hiramatsu
2018-05-28  7:13   ` Masami Hiramatsu
2018-05-30  9:01 ` [PATCH -tip v4 00/27] kprobes: Cleanup jprobe implementation Masami Hiramatsu
2018-05-30  9:01   ` Masami Hiramatsu
2018-05-31 10:43   ` Naveen N. Rao
2018-05-31 10:43     ` Naveen N. Rao

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=1527937081.8b4s5988lk.naveen@linux.ibm.com \
    --to=naveen.n.rao@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=ananth@linux.vnet.ibm.com \
    --cc=arnd@arndb.de \
    --cc=ast@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=fenghua.yu@intel.com \
    --cc=hpa@zytor.com \
    --cc=jbacik@fb.com \
    --cc=jhogan@kernel.org \
    --cc=labbott@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mhiramat@kernel.org \
    --cc=mingo@kernel.org \
    --cc=mingo@redhat.com \
    --cc=ralf@linux-mips.org \
    --cc=ravi.bangoria@linux.vnet.ibm.com \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    --cc=vgupta@synopsys.com \
    --cc=will.deacon@arm.com \
    --cc=x86@kernel.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.