tracing: Have eprobes use filtering logic of trace events
authorSteven Rostedt (VMware) <rostedt@goodmis.org>
Tue, 30 Nov 2021 02:39:48 +0000 (21:39 -0500)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Mon, 6 Dec 2021 20:37:22 +0000 (15:37 -0500)
The eprobes open code the reserving of the event on the ring buffer for
ftrace instead of using the ftrace event wrappers, which means that it
doesn't get affected by the filters, breaking the filtering logic on user
space.

Link: https://lkml.kernel.org/r/20211130024319.068451680@goodmis.org
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/trace_eprobe.c

index 928867f527e70ad9d3a1f8b10c7266eaa859c030..88487752d307cd60e570458863e2f065eff11361 100644 (file)
@@ -489,18 +489,12 @@ __eprobe_trace_func(struct eprobe_data *edata, void *rec)
        if (trace_trigger_soft_disabled(edata->file))
                return;
 
-       fbuffer.trace_ctx = tracing_gen_ctx();
-       fbuffer.trace_file = edata->file;
-
        dsize = get_eprobe_size(&edata->ep->tp, rec);
-       fbuffer.regs = NULL;
-
-       fbuffer.event =
-               trace_event_buffer_lock_reserve(&fbuffer.buffer, edata->file,
-                                       call->event.type,
-                                       sizeof(*entry) + edata->ep->tp.size + dsize,
-                                       fbuffer.trace_ctx);
-       if (!fbuffer.event)
+
+       entry = trace_event_buffer_reserve(&fbuffer, edata->file,
+                                          sizeof(*entry) + edata->ep->tp.size + dsize);
+
+       if (!entry)
                return;
 
        entry = fbuffer.entry = ring_buffer_event_data(fbuffer.event);