lkml.org 
[lkml]   [2020]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 241/265] tracing/boottime: Fix kprobe multiple events
    Date
    From: Sascha Ortmann <sascha.ortmann@stud.uni-hannover.de>

    commit 20dc3847cc2fc886ee4eb9112e6e2fad9419b0c7 upstream.

    Fix boottime kprobe events to report and abort after each failure when
    adding probes.

    As an example, when we try to set multiprobe kprobe events in
    bootconfig like this:

    ftrace.event.kprobes.vfsevents {
    probes = "vfs_read $arg1 $arg2,,
    !error! not reported;?", // leads to error
    "vfs_write $arg1 $arg2"
    }

    This will not work as expected. After
    commit da0f1f4167e3af69e ("tracing/boottime: Fix kprobe event API usage"),
    the function trace_boot_add_kprobe_event will not produce any error
    message when adding a probe fails at kprobe_event_gen_cmd_start.
    Furthermore, we continue to add probes when kprobe_event_gen_cmd_end fails
    (and kprobe_event_gen_cmd_start did not fail). In this case the function
    even returns successfully when the last call to kprobe_event_gen_cmd_end
    is successful.

    The behaviour of reporting and aborting after failures is not
    consistent.

    The function trace_boot_add_kprobe_event now reports each failure and
    stops adding probes immediately.

    Link: https://lkml.kernel.org/r/20200618163301.25854-1-sascha.ortmann@stud.uni-hannover.de

    Cc: stable@vger.kernel.org
    Cc: linux-kernel@i4.cs.fau.de
    Co-developed-by: Maximilian Werner <maximilian.werner96@gmail.com>
    Fixes: da0f1f4167e3 ("tracing/boottime: Fix kprobe event API usage")
    Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: Maximilian Werner <maximilian.werner96@gmail.com>
    Signed-off-by: Sascha Ortmann <sascha.ortmann@stud.uni-hannover.de>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    kernel/trace/trace_boot.c | 8 ++++++--
    1 file changed, 6 insertions(+), 2 deletions(-)

    diff --git a/kernel/trace/trace_boot.c b/kernel/trace/trace_boot.c
    index 9de29bb45a27f..fdc5abc00bf84 100644
    --- a/kernel/trace/trace_boot.c
    +++ b/kernel/trace/trace_boot.c
    @@ -101,12 +101,16 @@ trace_boot_add_kprobe_event(struct xbc_node *node, const char *event)
    kprobe_event_cmd_init(&cmd, buf, MAX_BUF_LEN);

    ret = kprobe_event_gen_cmd_start(&cmd, event, val);
    - if (ret)
    + if (ret) {
    + pr_err("Failed to generate probe: %s\n", buf);
    break;
    + }

    ret = kprobe_event_gen_cmd_end(&cmd);
    - if (ret)
    + if (ret) {
    pr_err("Failed to add probe: %s\n", buf);
    + break;
    + }
    }

    return ret;
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-29 20:36    [W:3.229 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site