tracing: Eliminate double free on failure of allocation on boot up
authorYoshihiro YUNOMAE <yoshihiro.yunomae.ez@hitachi.com>
Tue, 3 Jun 2014 04:28:03 +0000 (13:28 +0900)
committerSteven Rostedt <rostedt@goodmis.org>
Tue, 3 Jun 2014 23:58:31 +0000 (19:58 -0400)
If allocation of the max_buffer fails on boot up, the error path will
free both per_cpu data structures from the buffers. With the new redesign
of the code, those structures are freed if allocations failed. That is,
the helper function that allocates the buffers will free the per cpu data
on failure. No need to do it again. In fact, the second free will cause
a bug as the code can not handle a double free.

Link: http://lkml.kernel.org/p/20140603042803.27308.30956.stgit@yunodevel
Signed-off-by: Yoshihiro YUNOMAE <yoshihiro.yunomae.ez@hitachi.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
kernel/trace/trace.c

index 626dbfde5d56477db132da04f69c6371436886c8..135af323608b0a4567143e8369901d033910017f 100644 (file)
@@ -6671,10 +6671,6 @@ __init static int tracer_alloc_buffers(void)
 out_free_temp_buffer:
        ring_buffer_free(temp_buffer);
 out_free_cpumask:
-       free_percpu(global_trace.trace_buffer.data);
-#ifdef CONFIG_TRACER_MAX_TRACE
-       free_percpu(global_trace.max_buffer.data);
-#endif
        free_cpumask_var(global_trace.tracing_cpumask);
 out_free_buffer_mask:
        free_cpumask_var(tracing_buffer_mask);