tracing/events: fix concurrent access to ftrace_events list, fix
authorLi Zefan <lizf@cn.fujitsu.com>
Thu, 7 May 2009 07:11:15 +0000 (15:11 +0800)
committerIngo Molnar <mingo@elte.hu>
Thu, 7 May 2009 08:07:28 +0000 (10:07 +0200)
In filter_add_subsystem_pred() we should release event_mutex before
calling filter_free_subsystem_preds(), since both functions hold
event_mutex.

[ Impact: fix deadlock when writing invalid pred into subsystem filter ]

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Cc: tzanussi@gmail.com
Cc: a.p.zijlstra@chello.nl
Cc: fweisbec@gmail.com
Cc: rostedt@goodmis.org
LKML-Reference: <4A028993.7020509@cn.fujitsu.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/trace/trace_events_filter.c

index 8c62e5bdff0989f1595c5490e95c2e6e6ce289f3..85ad6a8939ad2ea01df946bfe31f3f020f7b56bf 100644 (file)
@@ -636,14 +636,15 @@ static int filter_add_subsystem_pred(struct filter_parse_state *ps,
 
                err = filter_add_pred(ps, call, pred);
                if (err) {
+                       mutex_unlock(&event_mutex);
                        filter_free_subsystem_preds(system);
                        parse_error(ps, FILT_ERR_BAD_SUBSYS_FILTER, 0);
-                       break;
+                       goto out;
                }
                replace_filter_string(call->filter, filter_string);
        }
        mutex_unlock(&event_mutex);
-
+out:
        return err;
 }