tracing: Do not reference event data in post call triggers
Trace event triggers can be called before or after the event has been committed. If it has been called after the commit, there's a possibility that the event no longer exists. Currently, the two post callers is the trigger to disable tracing (traceoff) and the one that will record a stack dump (stacktrace). Neither of them reference the trace event entry record, as that would lead to a race condition that could pass in corrupted data. To prevent any other users of the post data triggers from using the trace event record, pass in NULL to the post call trigger functions for the event record, as they should never need to use them in the first place. This does not fix any bug, but prevents bugs from happening by new post call trigger users. Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org> Reviewed-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
parent
f39e239102
commit
c94e45bc38
|
@ -435,8 +435,7 @@ event_triggers_call(struct trace_event_file *file, void *rec,
|
|||
struct ring_buffer_event *event);
|
||||
extern void
|
||||
event_triggers_post_call(struct trace_event_file *file,
|
||||
enum event_trigger_type tt,
|
||||
void *rec, struct ring_buffer_event *event);
|
||||
enum event_trigger_type tt);
|
||||
|
||||
bool trace_event_ignore_this_pid(struct trace_event_file *trace_file);
|
||||
|
||||
|
|
|
@ -1334,7 +1334,7 @@ event_trigger_unlock_commit(struct trace_event_file *file,
|
|||
trace_buffer_unlock_commit(file->tr, buffer, event, irq_flags, pc);
|
||||
|
||||
if (tt)
|
||||
event_triggers_post_call(file, tt, entry, event);
|
||||
event_triggers_post_call(file, tt);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1367,7 +1367,7 @@ event_trigger_unlock_commit_regs(struct trace_event_file *file,
|
|||
irq_flags, pc, regs);
|
||||
|
||||
if (tt)
|
||||
event_triggers_post_call(file, tt, entry, event);
|
||||
event_triggers_post_call(file, tt);
|
||||
}
|
||||
|
||||
#define FILTER_PRED_INVALID ((unsigned short)-1)
|
||||
|
|
|
@ -97,7 +97,6 @@ EXPORT_SYMBOL_GPL(event_triggers_call);
|
|||
* event_triggers_post_call - Call 'post_triggers' for a trace event
|
||||
* @file: The trace_event_file associated with the event
|
||||
* @tt: enum event_trigger_type containing a set bit for each trigger to invoke
|
||||
* @rec: The trace entry for the event
|
||||
*
|
||||
* For each trigger associated with an event, invoke the trigger
|
||||
* function registered with the associated trigger command, if the
|
||||
|
@ -108,8 +107,7 @@ EXPORT_SYMBOL_GPL(event_triggers_call);
|
|||
*/
|
||||
void
|
||||
event_triggers_post_call(struct trace_event_file *file,
|
||||
enum event_trigger_type tt,
|
||||
void *rec, struct ring_buffer_event *event)
|
||||
enum event_trigger_type tt)
|
||||
{
|
||||
struct event_trigger_data *data;
|
||||
|
||||
|
@ -117,7 +115,7 @@ event_triggers_post_call(struct trace_event_file *file,
|
|||
if (data->paused)
|
||||
continue;
|
||||
if (data->cmd_ops->trigger_type & tt)
|
||||
data->ops->func(data, rec, event);
|
||||
data->ops->func(data, NULL, NULL);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(event_triggers_post_call);
|
||||
|
|
Loading…
Reference in New Issue