Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e8f436c0 authored by Masami Hiramatsu's avatar Masami Hiramatsu Committed by Sasha Levin
Browse files

tracing: Fix event trigger to accept redundant spaces

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: 85f2b082 ("tracing: Add basic event trigger framework")
Reviewed-by: default avatarTom Zanussi <zanussi@kernel.org>
Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 77d09ad3
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -211,11 +211,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);
@@ -624,8 +630,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);

@@ -1361,6 +1373,11 @@ int 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)