Skip to content

Commit

Permalink
tracing: Fix initialization failure path in tracing_set_tracer()
Browse files Browse the repository at this point in the history
If tracer->init() fails, current code will leave current_tracer pointing
to an unusable tracer, which at best makes 'current_tracer' report
inaccurate value.

Fix the issue by pointing current_tracer to nop tracer, and only update
current_tracer with the new one after all the initialization succeeds.

Signed-off-by: Anton Vorontsov <anton.vorontsov@linaro.org>
Acked-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Anton Vorontsov authored and Greg Kroah-Hartman committed Jul 17, 2012
1 parent c1743cb commit b2ad368
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions kernel/trace/trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -3172,10 +3172,10 @@ static int tracing_set_tracer(const char *buf)
}
destroy_trace_option_files(topts);

current_trace = t;
current_trace = &nop_trace;

topts = create_trace_option_files(current_trace);
if (current_trace->use_max_tr) {
topts = create_trace_option_files(t);
if (t->use_max_tr) {
int cpu;
/* we need to make per cpu buffer sizes equivalent */
for_each_tracing_cpu(cpu) {
Expand All @@ -3195,6 +3195,7 @@ static int tracing_set_tracer(const char *buf)
goto out;
}

current_trace = t;
trace_branch_enable(tr);
out:
mutex_unlock(&trace_types_lock);
Expand Down

0 comments on commit b2ad368

Please sign in to comment.