ftrace: Fix unmatched locking in ftrace_regex_write()
authorLi Zefan <lizf@cn.fujitsu.com>
Tue, 3 Nov 2009 00:55:38 +0000 (08:55 +0800)
committerSteven Rostedt <rostedt@goodmis.org>
Wed, 4 Nov 2009 06:42:10 +0000 (01:42 -0500)
When a command is passed to the set_ftrace_filter, then
the ftrace_regex_lock is still held going back to user space.

 # echo 'do_open : foo' > set_ftrace_filter
 (still holding ftrace_regex_lock when returning to user space!)

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <4AEF7F8A.3080300@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
kernel/trace/ftrace.c

index 9c451a1930b6a7db58be0f78323f487e2ddd4562..6dc4e5ef7a01aab7e92479455c3672ce6096461c 100644 (file)
@@ -2222,15 +2222,15 @@ ftrace_regex_write(struct file *file, const char __user *ubuf,
                ret = ftrace_process_regex(parser->buffer,
                                           parser->idx, enable);
                if (ret)
-                       goto out;
+                       goto out_unlock;
 
                trace_parser_clear(parser);
        }
 
        ret = read;
-
+out_unlock:
        mutex_unlock(&ftrace_regex_lock);
-out:
+
        return ret;
 }