Skip to content

Commit

Permalink
tracing: append ":*" to internal setting of system events
Browse files Browse the repository at this point in the history
The system enabling of events uses the same code as the set_event file.
It passes in the name of the system to the parser and that will enable
all the events that has that system as a name.

The problem is that it will also enable events with the same name as the
system.

If you have system name foo, and system name bar, but within the system
bar, there exists an event called foo. By setting the system name foo,
you will also be enabling the event foo in the system bar. This is not
an expected result.

The solution is to pass in "foo:*", which will only enable the system
foo and not events called foo.

[ Impact: prevent accidental enabling of events with same name as a system ]

Reported-by: Li Zefan <lizf@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
  • Loading branch information
Steven Rostedt authored and Steven Rostedt committed May 7, 2009
1 parent 29c8000 commit d6bf81e
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions kernel/trace/trace_events.c
Original file line number Diff line number Diff line change
Expand Up @@ -509,9 +509,11 @@ system_enable_write(struct file *filp, const char __user *ubuf, size_t cnt,
return -EINVAL;
}

command = kstrdup(system, GFP_KERNEL);
/* +3 for the ":*\0" */
command = kmalloc(strlen(system)+3, GFP_KERNEL);
if (!command)
return -ENOMEM;
sprintf(command, "%s:*", system);

ret = ftrace_set_clr_event(command, val);
if (ret)
Expand Down Expand Up @@ -1179,7 +1181,7 @@ static __init int event_trace_init(void)
&ftrace_show_header_fops);

trace_create_file("enable", 0644, d_events,
"*:*", &ftrace_system_enable_fops);
"*", &ftrace_system_enable_fops);

for_each_event(call, __start_ftrace_events, __stop_ftrace_events) {
/* The linker may leave blanks */
Expand Down

0 comments on commit d6bf81e

Please sign in to comment.