diff options
Diffstat (limited to 'kernel/trace/trace_uprobe.c')
| -rw-r--r-- | kernel/trace/trace_uprobe.c | 15 | 
1 files changed, 8 insertions, 7 deletions
diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c index 7dc1c8abecd6..d60fe62ec4fa 100644 --- a/kernel/trace/trace_uprobe.c +++ b/kernel/trace/trace_uprobe.c  | |||
| @@ -196,7 +196,7 @@ DEFINE_FETCH_file_offset(string) | |||
| 196 | DEFINE_FETCH_file_offset(string_size) | 196 | DEFINE_FETCH_file_offset(string_size) | 
| 197 | 197 | ||
| 198 | /* Fetch type information table */ | 198 | /* Fetch type information table */ | 
| 199 | const struct fetch_type uprobes_fetch_type_table[] = { | 199 | static const struct fetch_type uprobes_fetch_type_table[] = { | 
| 200 | /* Special types */ | 200 | /* Special types */ | 
| 201 | [FETCH_TYPE_STRING] = __ASSIGN_FETCH_TYPE("string", string, string, | 201 | [FETCH_TYPE_STRING] = __ASSIGN_FETCH_TYPE("string", string, string, | 
| 202 | sizeof(u32), 1, "__data_loc char[]"), | 202 | sizeof(u32), 1, "__data_loc char[]"), | 
| @@ -535,7 +535,8 @@ static int create_trace_uprobe(int argc, char **argv) | |||
| 535 | 535 | ||
| 536 | /* Parse fetch argument */ | 536 | /* Parse fetch argument */ | 
| 537 | ret = traceprobe_parse_probe_arg(arg, &tu->tp.size, parg, | 537 | ret = traceprobe_parse_probe_arg(arg, &tu->tp.size, parg, | 
| 538 | is_return, false); | 538 | is_return, false, | 
| 539 | uprobes_fetch_type_table); | ||
| 539 | if (ret) { | 540 | if (ret) { | 
| 540 | pr_info("Parse error at argument[%d]. (%d)\n", i, ret); | 541 | pr_info("Parse error at argument[%d]. (%d)\n", i, ret); | 
| 541 | goto error; | 542 | goto error; | 
| @@ -1005,7 +1006,7 @@ __uprobe_perf_filter(struct trace_uprobe_filter *filter, struct mm_struct *mm) | |||
| 1005 | return true; | 1006 | return true; | 
| 1006 | 1007 | ||
| 1007 | list_for_each_entry(event, &filter->perf_events, hw.tp_list) { | 1008 | list_for_each_entry(event, &filter->perf_events, hw.tp_list) { | 
| 1008 | if (event->hw.tp_target->mm == mm) | 1009 | if (event->hw.target->mm == mm) | 
| 1009 | return true; | 1010 | return true; | 
| 1010 | } | 1011 | } | 
| 1011 | 1012 | ||
| @@ -1015,7 +1016,7 @@ __uprobe_perf_filter(struct trace_uprobe_filter *filter, struct mm_struct *mm) | |||
| 1015 | static inline bool | 1016 | static inline bool | 
| 1016 | uprobe_filter_event(struct trace_uprobe *tu, struct perf_event *event) | 1017 | uprobe_filter_event(struct trace_uprobe *tu, struct perf_event *event) | 
| 1017 | { | 1018 | { | 
| 1018 | return __uprobe_perf_filter(&tu->filter, event->hw.tp_target->mm); | 1019 | return __uprobe_perf_filter(&tu->filter, event->hw.target->mm); | 
| 1019 | } | 1020 | } | 
| 1020 | 1021 | ||
| 1021 | static int uprobe_perf_close(struct trace_uprobe *tu, struct perf_event *event) | 1022 | static int uprobe_perf_close(struct trace_uprobe *tu, struct perf_event *event) | 
| @@ -1023,10 +1024,10 @@ static int uprobe_perf_close(struct trace_uprobe *tu, struct perf_event *event) | |||
| 1023 | bool done; | 1024 | bool done; | 
| 1024 | 1025 | ||
| 1025 | write_lock(&tu->filter.rwlock); | 1026 | write_lock(&tu->filter.rwlock); | 
| 1026 | if (event->hw.tp_target) { | 1027 | if (event->hw.target) { | 
| 1027 | list_del(&event->hw.tp_list); | 1028 | list_del(&event->hw.tp_list); | 
| 1028 | done = tu->filter.nr_systemwide || | 1029 | done = tu->filter.nr_systemwide || | 
| 1029 | (event->hw.tp_target->flags & PF_EXITING) || | 1030 | (event->hw.target->flags & PF_EXITING) || | 
| 1030 | uprobe_filter_event(tu, event); | 1031 | uprobe_filter_event(tu, event); | 
| 1031 | } else { | 1032 | } else { | 
| 1032 | tu->filter.nr_systemwide--; | 1033 | tu->filter.nr_systemwide--; | 
| @@ -1046,7 +1047,7 @@ static int uprobe_perf_open(struct trace_uprobe *tu, struct perf_event *event) | |||
| 1046 | int err; | 1047 | int err; | 
| 1047 | 1048 | ||
| 1048 | write_lock(&tu->filter.rwlock); | 1049 | write_lock(&tu->filter.rwlock); | 
| 1049 | if (event->hw.tp_target) { | 1050 | if (event->hw.target) { | 
| 1050 | /* | 1051 | /* | 
| 1051 | * event->parent != NULL means copy_process(), we can avoid | 1052 | * event->parent != NULL means copy_process(), we can avoid | 
| 1052 | * uprobe_apply(). current->mm must be probed and we can rely | 1053 | * uprobe_apply(). current->mm must be probed and we can rely | 
