]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
tracing: Fix return while holding a lock in register_tracer()
authorChunyu Hu <chuhu@redhat.com>
Mon, 14 Mar 2016 12:35:41 +0000 (20:35 +0800)
committerSteven Rostedt <rostedt@goodmis.org>
Fri, 18 Mar 2016 14:36:21 +0000 (10:36 -0400)
commit d39cdd2036a6 ("tracing: Make tracer_flags use the right set_flag
callback")  introduces a potential mutex deadlock issue, as it forgets to
free the mutex when allocaing the tracer_flags gets fail.

The issue was found by Dan Carpenter through Smatch static code check tool.

Link: http://lkml.kernel.org/r/1457958941-30265-1-git-send-email-chuhu@redhat.com
Fixes: d39cdd2036a6 ("tracing: Make tracer_flags use the right set_flag callback")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Chunyu Hu <chuhu@redhat.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
kernel/trace/trace.c

index b401a1892dc6cbfe2c5bc82b0417ce4cd63be2d5..0ae46048f7248887b3ab334ac3feb9cf4b66ca10 100644 (file)
@@ -1256,8 +1256,10 @@ int __init register_tracer(struct tracer *type)
        if (!type->flags) {
                /*allocate a dummy tracer_flags*/
                type->flags = kmalloc(sizeof(*type->flags), GFP_KERNEL);
-               if (!type->flags)
-                       return -ENOMEM;
+               if (!type->flags) {
+                       ret = -ENOMEM;
+                       goto out;
+               }
                type->flags->val = 0;
                type->flags->opts = dummy_tracer_opt;
        } else