diff options
| author | Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> | 2017-07-07 14:57:30 -0400 |
|---|---|---|
| committer | Steven Rostedt (VMware) <rostedt@goodmis.org> | 2017-07-09 07:45:53 -0400 |
| commit | fca18a47cf3eb8425ec19c2dfc374f3d04f5219f (patch) | |
| tree | aa754243fd1064a96af411d42354cb985e8bdbfa /kernel | |
| parent | 29b1a8ad7df4528b862a79e3d5fb0936f4d199c7 (diff) | |
trace/kprobes: Sanitize derived event names
When we derive event names, convert some expected symbols (such as ':'
used to specify module:name and '.' present in some symbols) into
underscores so that the event name is not rejected.
Before this patch:
# echo 'p kobject_example:foo_store' > kprobe_events
trace_kprobe: Failed to allocate trace_probe.(-22)
-sh: write error: Invalid argument
After this patch:
# echo 'p kobject_example:foo_store' > kprobe_events
# cat kprobe_events
p:kprobes/p_kobject_example_foo_store_0 kobject_example:foo_store
Link: http://lkml.kernel.org/r/66c189e09e71361aba91dd4a5bd146a1b62a7a51.1499453040.git.naveen.n.rao@linux.vnet.ibm.com
Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/trace/trace_kprobe.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index c129fca6ec99..44fd819aa33d 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c | |||
| @@ -598,6 +598,14 @@ static struct notifier_block trace_kprobe_module_nb = { | |||
| 598 | .priority = 1 /* Invoked after kprobe module callback */ | 598 | .priority = 1 /* Invoked after kprobe module callback */ |
| 599 | }; | 599 | }; |
| 600 | 600 | ||
| 601 | /* Convert certain expected symbols into '_' when generating event names */ | ||
| 602 | static inline void sanitize_event_name(char *name) | ||
| 603 | { | ||
| 604 | while (*name++ != '\0') | ||
| 605 | if (*name == ':' || *name == '.') | ||
| 606 | *name = '_'; | ||
| 607 | } | ||
| 608 | |||
| 601 | static int create_trace_kprobe(int argc, char **argv) | 609 | static int create_trace_kprobe(int argc, char **argv) |
| 602 | { | 610 | { |
| 603 | /* | 611 | /* |
| @@ -740,6 +748,7 @@ static int create_trace_kprobe(int argc, char **argv) | |||
| 740 | else | 748 | else |
| 741 | snprintf(buf, MAX_EVENT_NAME_LEN, "%c_0x%p", | 749 | snprintf(buf, MAX_EVENT_NAME_LEN, "%c_0x%p", |
| 742 | is_return ? 'r' : 'p', addr); | 750 | is_return ? 'r' : 'p', addr); |
| 751 | sanitize_event_name(buf); | ||
| 743 | event = buf; | 752 | event = buf; |
| 744 | } | 753 | } |
| 745 | tk = alloc_trace_kprobe(group, event, addr, symbol, offset, maxactive, | 754 | tk = alloc_trace_kprobe(group, event, addr, symbol, offset, maxactive, |
