lkml.org 
[lkml]   [2019]   [Sep]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[for-next][PATCH 6/8] tracing/probe: Fix to allow user to enable events on unloaded modules
    From: Masami Hiramatsu <mhiramat@kernel.org>

    Fix to allow user to enable probe events on unloaded modules.

    This operations was allowed before commit 60d53e2c3b75 ("tracing/probe:
    Split trace_event related data from trace_probe"), because if users
    need to probe module init functions, they have to enable those probe
    events before loading module.

    Link: http://lkml.kernel.org/r/156879693733.31056.9331322616994665167.stgit@devnote2

    Cc: stable@vger.kernel.org
    Fixes: 60d53e2c3b75 ("tracing/probe: Split trace_event related data from trace_probe")
    Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    ---
    kernel/trace/trace_kprobe.c | 17 +++++------------
    1 file changed, 5 insertions(+), 12 deletions(-)

    diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
    index 7579c53bb053..0ba3239c0270 100644
    --- a/kernel/trace/trace_kprobe.c
    +++ b/kernel/trace/trace_kprobe.c
    @@ -371,31 +371,24 @@ static int enable_trace_kprobe(struct trace_event_call *call,
    if (enabled)
    return 0;

    - enabled = false;
    list_for_each_entry(pos, trace_probe_probe_list(tp), list) {
    tk = container_of(pos, struct trace_kprobe, tp);
    if (trace_kprobe_has_gone(tk))
    continue;
    ret = __enable_trace_kprobe(tk);
    - if (ret) {
    - if (enabled) {
    - __disable_trace_kprobe(tp);
    - enabled = false;
    - }
    + if (ret)
    break;
    - }
    enabled = true;
    }

    - if (!enabled) {
    - /* No probe is enabled. Roll back */
    + if (ret) {
    + /* Failed to enable one of them. Roll back all */
    + if (enabled)
    + __disable_trace_kprobe(tp);
    if (file)
    trace_probe_remove_file(tp, file);
    else
    trace_probe_clear_flag(tp, TP_FLAG_PROFILE);
    - if (!ret)
    - /* Since all probes are gone, this is not available */
    - ret = -EADDRNOTAVAIL;
    }

    return ret;
    --
    2.20.1

    \
     
     \ /
      Last update: 2019-09-20 01:25    [W:2.179 / U:0.568 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site