| From 6cb206508b621a9a0a2c35b60540e399225c8243 Mon Sep 17 00:00:00 2001 |
| From: "Steven Rostedt (VMware)" <rostedt@goodmis.org> |
| Date: Fri, 26 Nov 2021 13:35:26 -0500 |
| Subject: tracing: Check pid filtering when creating events |
| |
| From: Steven Rostedt (VMware) <rostedt@goodmis.org> |
| |
| commit 6cb206508b621a9a0a2c35b60540e399225c8243 upstream. |
| |
| When pid filtering is activated in an instance, all of the events trace |
| files for that instance has the PID_FILTER flag set. This determines |
| whether or not pid filtering needs to be done on the event, otherwise the |
| event is executed as normal. |
| |
| If pid filtering is enabled when an event is created (via a dynamic event |
| or modules), its flag is not updated to reflect the current state, and the |
| events are not filtered properly. |
| |
| Cc: stable@vger.kernel.org |
| Fixes: 3fdaf80f4a836 ("tracing: Implement event pid filtering") |
| Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| kernel/trace/trace_events.c | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| --- a/kernel/trace/trace_events.c |
| +++ b/kernel/trace/trace_events.c |
| @@ -2341,12 +2341,19 @@ static struct trace_event_file * |
| trace_create_new_event(struct trace_event_call *call, |
| struct trace_array *tr) |
| { |
| + struct trace_pid_list *pid_list; |
| struct trace_event_file *file; |
| |
| file = kmem_cache_alloc(file_cachep, GFP_TRACE); |
| if (!file) |
| return NULL; |
| |
| + pid_list = rcu_dereference_protected(tr->filtered_pids, |
| + lockdep_is_held(&event_mutex)); |
| + |
| + if (pid_list) |
| + file->flags |= EVENT_FILE_FL_PID_FILTER; |
| + |
| file->event_call = call; |
| file->tr = tr; |
| atomic_set(&file->sm_ref, 0); |