All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <mhiramat@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>,
	Ingo Molnar <mingo@redhat.com>, "H . Peter Anvin" <hpa@zytor.com>,
	linux-kernel@vger.kernel.org,
	Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	linux-arch@vger.kernel.org, Jonathan Corbet <corbet@lwn.net>,
	linux-doc@vger.kernel.org
Subject: [RFC PATCH -tip v5 26/27] Documentation: kprobes: Add how to change the execution path
Date: Tue,  5 Jun 2018 01:01:09 +0900	[thread overview]
Message-ID: <152812806959.10068.3756867273565043166.stgit@devbox> (raw)
In-Reply-To: <152812730943.10068.5166429445118734697.stgit@devbox>

Add a section that explaining how to change the execution
path with kprobes and warnings for some arch.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: linux-doc@vger.kernel.org
---
 Documentation/kprobes.txt |   20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/Documentation/kprobes.txt b/Documentation/kprobes.txt
index 3e9e99ea751b..8a98eed1521b 100644
--- a/Documentation/kprobes.txt
+++ b/Documentation/kprobes.txt
@@ -80,6 +80,26 @@ After the instruction is single-stepped, Kprobes executes the
 "post_handler," if any, that is associated with the kprobe.
 Execution then continues with the instruction following the probepoint.
 
+Changing Execution Path
+-----------------------
+
+Since the kprobes can probe into a running kernel code, it can change
+the register set, including instruction pointer. This operation
+requires maximum attention, such as keeping the stack frame, recovering
+execution path etc. Since it is operated on running kernel and need deep
+knowladge of the archtecture and concurrent computing, you can easily
+shot your foot.
+
+If you change the instruction pointer (and set up other related
+registers) in pre_handler, you must return !0 so that the kprobes
+stops single stepping and just returns to given address.
+This also means post_handler should not be called anymore.
+
+Note that this operation may be harder on some architectures which
+use TOC (Table of Contents) for function call, since you have to
+setup new TOC for your function in your module, and recover old
+one after back from it.
+
 Return Probes
 -------------
 

WARNING: multiple messages have this Message-ID (diff)
From: Masami Hiramatsu <mhiramat@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>,
	Ingo Molnar <mingo@redhat.com>, "H . Peter Anvin" <hpa@zytor.com>,
	linux-kernel@vger.kernel.org,
	Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	linux-arch@vger.kernel.org, Jonathan Corbet <corbet@lwn.net>,
	linux-doc@vger.kernel.org
Subject: [RFC PATCH -tip v5 26/27] Documentation: kprobes: Add how to change the execution path
Date: Tue,  5 Jun 2018 01:01:09 +0900	[thread overview]
Message-ID: <152812806959.10068.3756867273565043166.stgit@devbox> (raw)
In-Reply-To: <152812730943.10068.5166429445118734697.stgit@devbox>

Add a section that explaining how to change the execution
path with kprobes and warnings for some arch.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: linux-doc@vger.kernel.org
---
 Documentation/kprobes.txt |   20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/Documentation/kprobes.txt b/Documentation/kprobes.txt
index 3e9e99ea751b..8a98eed1521b 100644
--- a/Documentation/kprobes.txt
+++ b/Documentation/kprobes.txt
@@ -80,6 +80,26 @@ After the instruction is single-stepped, Kprobes executes the
 "post_handler," if any, that is associated with the kprobe.
 Execution then continues with the instruction following the probepoint.
 
+Changing Execution Path
+-----------------------
+
+Since the kprobes can probe into a running kernel code, it can change
+the register set, including instruction pointer. This operation
+requires maximum attention, such as keeping the stack frame, recovering
+execution path etc. Since it is operated on running kernel and need deep
+knowladge of the archtecture and concurrent computing, you can easily
+shot your foot.
+
+If you change the instruction pointer (and set up other related
+registers) in pre_handler, you must return !0 so that the kprobes
+stops single stepping and just returns to given address.
+This also means post_handler should not be called anymore.
+
+Note that this operation may be harder on some architectures which
+use TOC (Table of Contents) for function call, since you have to
+setup new TOC for your function in your module, and recover old
+one after back from it.
+
 Return Probes
 -------------
 

--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2018-06-04 16:01 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-04 15:48 [RFC PATCH -tip v5 00/27] kprobes: Cleanup jprobe implementation Masami Hiramatsu
2018-06-04 15:49 ` [RFC PATCH -tip v5 01/27] Documentation/kprobes: Fix to remove remaining jprobe Masami Hiramatsu
2018-06-04 15:49   ` Masami Hiramatsu
2018-06-04 15:49 ` [RFC PATCH -tip v5 02/27] kprobes: Remove jprobe API implementation Masami Hiramatsu
2018-06-04 15:49 ` [RFC PATCH -tip v5 03/27] kprobes/x86: Remove jprobe implementation Masami Hiramatsu
2018-06-04 15:50 ` [RFC PATCH -tip v5 04/27] ARC: kprobes: " Masami Hiramatsu
2018-06-04 15:50   ` Masami Hiramatsu
2018-06-04 15:50 ` [RFC PATCH -tip v5 05/27] ARM: kprobes: Remove jprobe arm implementation Masami Hiramatsu
2018-06-04 15:50   ` Masami Hiramatsu
2018-06-04 15:51 ` [RFC PATCH -tip v5 06/27] arm64: kprobes: Remove jprobe implementation Masami Hiramatsu
2018-06-04 15:51   ` Masami Hiramatsu
2018-06-05 15:34   ` Will Deacon
2018-06-05 15:34     ` Will Deacon
2018-06-06  4:42     ` Masami Hiramatsu
2018-06-06  4:42       ` Masami Hiramatsu
2018-06-04 15:51 ` [RFC PATCH -tip v5 07/27] powerpc/kprobes: Remove jprobe powerpc implementation Masami Hiramatsu
2018-06-07 11:31   ` Naveen N. Rao
2018-06-07 11:31     ` Naveen N. Rao
2018-06-07 14:23     ` Masami Hiramatsu
2018-06-04 15:52 ` [RFC PATCH -tip v5 08/27] ia64: kprobes: Remove jprobe implementation Masami Hiramatsu
2018-06-04 15:52   ` Masami Hiramatsu
2018-06-04 15:52 ` [RFC PATCH -tip v5 09/27] MIPS: " Masami Hiramatsu
2018-06-04 15:53 ` [RFC PATCH -tip v5 10/27] s390/kprobes: " Masami Hiramatsu
2018-06-04 15:53 ` [RFC PATCH -tip v5 11/27] sh: kprobes: " Masami Hiramatsu
2018-06-04 15:53   ` Masami Hiramatsu
2018-06-04 15:54 ` [RFC PATCH -tip v5 12/27] sparc64: " Masami Hiramatsu
2018-06-04 15:54   ` Masami Hiramatsu
2018-06-04 15:54 ` [RFC PATCH -tip v5 13/27] kprobes: Don't check the ->break_handler() in generic kprobes code Masami Hiramatsu
2018-06-04 15:55 ` [RFC PATCH -tip v5 14/27] kprobes/x86: Don't call ->break_handler() in x86 kprobes Masami Hiramatsu
2018-06-04 15:55 ` [RFC PATCH -tip v5 15/27] ARC: kprobes: Don't call the ->break_handler() in ARC kprobes code Masami Hiramatsu
2018-06-04 15:55   ` Masami Hiramatsu
2018-06-04 15:56 ` [RFC PATCH -tip v5 16/27] ARM: kprobes: Don't call the ->break_handler() in arm " Masami Hiramatsu
2018-06-04 15:56   ` Masami Hiramatsu
2018-06-04 15:56 ` [RFC PATCH -tip v5 17/27] arm64: " Masami Hiramatsu
2018-06-04 15:56   ` Masami Hiramatsu
2018-06-05 15:37   ` Will Deacon
2018-06-05 15:37     ` Will Deacon
2018-06-04 15:57 ` [RFC PATCH -tip v5 18/27] powerpc/kprobes: " Masami Hiramatsu
2018-06-07 11:37   ` Naveen N. Rao
2018-06-07 11:37     ` Naveen N. Rao
2018-06-07 14:28     ` Masami Hiramatsu
2018-06-07 16:37       ` Naveen N. Rao
2018-06-07 16:37         ` Naveen N. Rao
2018-06-08  0:42         ` Masami Hiramatsu
2018-06-04 15:57 ` [RFC PATCH -tip v5 19/27] ia64: kprobes: Don't call the ->break_handler() in ia64 " Masami Hiramatsu
2018-06-04 15:57   ` Masami Hiramatsu
2018-06-04 15:58 ` [RFC PATCH -tip v5 20/27] MIPS: kprobes: Don't call the ->break_handler() in MIPS " Masami Hiramatsu
2018-06-04 15:58 ` [RFC PATCH -tip v5 21/27] s390/kprobes: Don't call the ->break_handler() in s390 " Masami Hiramatsu
2018-06-04 15:59 ` [RFC PATCH -tip v5 22/27] sh: kprobes: Don't call the ->break_handler() in SH " Masami Hiramatsu
2018-06-04 15:59   ` Masami Hiramatsu
2018-06-04 15:59 ` [RFC PATCH -tip v5 23/27] sparc64: kprobes: Don't call the ->break_handler() in sparc64 " Masami Hiramatsu
2018-06-04 15:59   ` Masami Hiramatsu
2018-06-04 16:00 ` [RFC PATCH -tip v5 24/27] bpf: error-inject: kprobes: Clear current_kprobe and enable preempt in kpr Masami Hiramatsu
2018-06-04 16:00   ` [RFC PATCH -tip v5 24/27] bpf: error-inject: kprobes: Clear current_kprobe and enable preempt in kprobe Masami Hiramatsu
2018-06-04 16:00   ` Masami Hiramatsu
2018-06-04 16:00   ` Masami Hiramatsu
2018-06-04 16:00   ` Masami Hiramatsu
2018-06-07 11:42   ` Naveen N. Rao
2018-06-07 11:54     ` [RFC PATCH -tip v5 24/27] bpf: error-inject: kprobes: Clear current_kprobe and enable preempt in Naveen N. Rao
2018-06-07 11:42     ` [RFC PATCH -tip v5 24/27] bpf: error-inject: kprobes: Clear current_kprobe and enable preempt in kprobe Naveen N. Rao
2018-06-07 11:42     ` Naveen N. Rao
2018-06-07 11:42     ` Naveen N. Rao
2018-06-07 11:42     ` Naveen N. Rao
2018-06-04 16:00 ` [RFC PATCH -tip v5 25/27] kprobes/x86: Do not disable preempt on int3 path Masami Hiramatsu
2018-06-04 16:00   ` Masami Hiramatsu
2018-06-04 16:01 ` Masami Hiramatsu [this message]
2018-06-04 16:01   ` [RFC PATCH -tip v5 26/27] Documentation: kprobes: Add how to change the execution path Masami Hiramatsu
2018-06-04 16:01 ` [RFC PATCH -tip v5 27/27] kprobes: Remove jprobe stub API 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=152812806959.10068.3756867273565043166.stgit@devbox \
    --to=mhiramat@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=ananth@linux.vnet.ibm.com \
    --cc=corbet@lwn.net \
    --cc=hpa@zytor.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=mingo@redhat.com \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /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.