perf-probe: Add user memory access attribute support
Add user memory access attribute for kprobe event arguments. If a given 'local variable' is in user-space, User can specify memory access method by '@user' suffix. This is not only for string but also for data structure. If we access a field of data structure in user memory from kernel on some arch, it will fail. e.g. perf probe -a "sched_setscheduler param->sched_priority" This will fail to access the "param->sched_priority" because the param is __user pointer. Instead, we can now specify @user suffix for such argument. perf probe -a "sched_setscheduler param->sched_priority@user" Note that kernel memory access with "@user" must always fail on any arch. Link: http://lkml.kernel.org/r/155789874562.26965.10836126971405890891.stgit@devnote2 Acked-by: Ingo Molnar <mingo@kernel.org> Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:

committed by
Steven Rostedt (VMware)

parent
bdf2b8cbf0
commit
1e032f7cfa
@@ -1577,6 +1577,17 @@ static int parse_perf_probe_arg(char *str, struct perf_probe_arg *arg)
|
||||
str = tmp + 1;
|
||||
}
|
||||
|
||||
tmp = strchr(str, '@');
|
||||
if (tmp && tmp != str && strcmp(tmp + 1, "user")) { /* user attr */
|
||||
if (!user_access_is_supported()) {
|
||||
semantic_error("ftrace does not support user access\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
*tmp = '\0';
|
||||
arg->user_access = true;
|
||||
pr_debug("user_access ");
|
||||
}
|
||||
|
||||
tmp = strchr(str, ':');
|
||||
if (tmp) { /* Type setting */
|
||||
*tmp = '\0';
|
||||
|
Reference in New Issue
Block a user