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 4.4 127/135] tracing: Fix event trigger to accept redundant spaces
    Date
    From: Masami Hiramatsu <mhiramat@kernel.org>

    commit 6784beada631800f2c5afd567e5628c843362cee upstream.

    Fix the event trigger to accept redundant spaces in
    the trigger input.

    For example, these return -EINVAL

    echo " traceon" > events/ftrace/print/trigger
    echo "traceon if common_pid == 0" > events/ftrace/print/trigger
    echo "disable_event:kmem:kmalloc " > events/ftrace/print/trigger

    But these are hard to find what is wrong.

    To fix this issue, use skip_spaces() to remove spaces
    in front of actual tokens, and set NULL if there is no
    token.

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

    Cc: Tom Zanussi <zanussi@kernel.org>
    Cc: stable@vger.kernel.org
    Fixes: 85f2b08268c0 ("tracing: Add basic event trigger framework")
    Reviewed-by: Tom Zanussi <zanussi@kernel.org>
    Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    kernel/trace/trace_events_trigger.c | 21 +++++++++++++++++++--
    1 file changed, 19 insertions(+), 2 deletions(-)

    diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c
    index 78346aba6980e..94fca4d687adc 100644
    --- a/kernel/trace/trace_events_trigger.c
    +++ b/kernel/trace/trace_events_trigger.c
    @@ -204,11 +204,17 @@ static int event_trigger_regex_open(struct inode *inode, struct file *file)

    static int trigger_process_regex(struct trace_event_file *file, char *buff)
    {
    - char *command, *next = buff;
    + char *command, *next;
    struct event_command *p;
    int ret = -EINVAL;

    + next = buff = skip_spaces(buff);
    command = strsep(&next, ": \t");
    + if (next) {
    + next = skip_spaces(next);
    + if (!*next)
    + next = NULL;
    + }
    command = (command[0] != '!') ? command : command + 1;

    mutex_lock(&trigger_cmd_mutex);
    @@ -615,8 +621,14 @@ event_trigger_callback(struct event_command *cmd_ops,
    int ret;

    /* separate the trigger from the filter (t:n [if filter]) */
    - if (param && isdigit(param[0]))
    + if (param && isdigit(param[0])) {
    trigger = strsep(&param, " \t");
    + if (param) {
    + param = skip_spaces(param);
    + if (!*param)
    + param = NULL;
    + }
    + }

    trigger_ops = cmd_ops->get_trigger_ops(cmd, trigger);

    @@ -1185,6 +1197,11 @@ event_enable_trigger_func(struct event_command *cmd_ops,
    trigger = strsep(&param, " \t");
    if (!trigger)
    return -EINVAL;
    + if (param) {
    + param = skip_spaces(param);
    + if (!*param)
    + param = NULL;
    + }

    system = strsep(&trigger, ":");
    if (!trigger)
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-29 23:16    [W:4.336 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site