diff options
| -rw-r--r-- | kernel/trace/trace_uprobe.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c index 04fdb5de823c..08e7970bf3f9 100644 --- a/kernel/trace/trace_uprobe.c +++ b/kernel/trace/trace_uprobe.c | |||
| @@ -893,6 +893,9 @@ probe_event_enable(struct trace_uprobe *tu, struct ftrace_event_file *file, | |||
| 893 | int ret; | 893 | int ret; |
| 894 | 894 | ||
| 895 | if (file) { | 895 | if (file) { |
| 896 | if (tu->tp.flags & TP_FLAG_PROFILE) | ||
| 897 | return -EINTR; | ||
| 898 | |||
| 896 | link = kmalloc(sizeof(*link), GFP_KERNEL); | 899 | link = kmalloc(sizeof(*link), GFP_KERNEL); |
| 897 | if (!link) | 900 | if (!link) |
| 898 | return -ENOMEM; | 901 | return -ENOMEM; |
| @@ -901,8 +904,12 @@ probe_event_enable(struct trace_uprobe *tu, struct ftrace_event_file *file, | |||
| 901 | list_add_tail_rcu(&link->list, &tu->tp.files); | 904 | list_add_tail_rcu(&link->list, &tu->tp.files); |
| 902 | 905 | ||
| 903 | tu->tp.flags |= TP_FLAG_TRACE; | 906 | tu->tp.flags |= TP_FLAG_TRACE; |
| 904 | } else | 907 | } else { |
| 908 | if (tu->tp.flags & TP_FLAG_TRACE) | ||
| 909 | return -EINTR; | ||
| 910 | |||
| 905 | tu->tp.flags |= TP_FLAG_PROFILE; | 911 | tu->tp.flags |= TP_FLAG_PROFILE; |
| 912 | } | ||
| 906 | 913 | ||
| 907 | ret = uprobe_buffer_enable(); | 914 | ret = uprobe_buffer_enable(); |
| 908 | if (ret < 0) | 915 | if (ret < 0) |
