lkml.org 
[lkml]   [2018]   [Jun]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH -tip v6 26/27] Documentation: kprobes: Add how to change the execution path
    Date
    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
    -------------

    \
     
     \ /
      Last update: 2018-06-19 18:17    [W:3.725 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site