diff options
author | Steven Rostedt <rostedt@goodmis.org> | 2008-07-30 20:20:55 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-08-15 17:54:40 +0200 |
commit | 5802294f1b1895ee19a3d0ae72805da453afb9de (patch) | |
tree | c6a09592897a8b9e0c6abf3a80070a8abb614744 /kernel | |
parent | rcu: just rename call_rcu_bh instead of making it a macro (diff) | |
download | linux-5802294f1b1895ee19a3d0ae72805da453afb9de.tar.xz linux-5802294f1b1895ee19a3d0ae72805da453afb9de.zip |
rcu: trace fix possible mem-leak
In the initialization of the RCU trace module, if
rcupreempt_debugfs_init() fails, we never free the the trace buffer.
This patch frees the trace buffer in case the debugfs fails.
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Reviewed-by: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/rcupreempt_trace.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/rcupreempt_trace.c b/kernel/rcupreempt_trace.c index 5edf82c34bbc..35c2d3360ecf 100644 --- a/kernel/rcupreempt_trace.c +++ b/kernel/rcupreempt_trace.c @@ -308,11 +308,16 @@ out: static int __init rcupreempt_trace_init(void) { + int ret; + mutex_init(&rcupreempt_trace_mutex); rcupreempt_trace_buf = kmalloc(RCUPREEMPT_TRACE_BUF_SIZE, GFP_KERNEL); if (!rcupreempt_trace_buf) return 1; - return rcupreempt_debugfs_init(); + ret = rcupreempt_debugfs_init(); + if (ret) + kfree(rcupreempt_trace_buf); + return ret; } static void __exit rcupreempt_trace_cleanup(void) |