From: Steven Rostedt (Red Hat) Date: Thu, 9 May 2013 22:20:37 +0000 (-0400) Subject: ftrace: Fix locking in register_ftrace_function_probe() X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=5ae0bf5972b66d35e5674e1b7d855b1e111a68ae;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git ftrace: Fix locking in register_ftrace_function_probe() The iteration of the ftrace function list and the call to ftrace_match_record() need to be protected by the ftrace_lock. Signed-off-by: Steven Rostedt --- diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index cacf0856191e..f104c45cbcc1 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -3017,14 +3017,16 @@ register_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, hash = alloc_and_copy_ftrace_hash(FTRACE_HASH_DEFAULT_BITS, *orig_hash); if (!hash) { count = -ENOMEM; - goto out_unlock; + goto out; } if (unlikely(ftrace_disabled)) { count = -ENODEV; - goto out_unlock; + goto out; } + mutex_lock(&ftrace_lock); + do_for_each_ftrace_rec(pg, rec) { if (!ftrace_match_record(rec, NULL, search, len, type)) @@ -3070,15 +3072,15 @@ register_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, } while_for_each_ftrace_rec(); - mutex_lock(&ftrace_lock); ret = ftrace_hash_move(&trace_probe_ops, 1, orig_hash, hash); if (ret < 0) count = ret; __enable_ftrace_function_probe(); - mutex_unlock(&ftrace_lock); out_unlock: + mutex_unlock(&ftrace_lock); + out: mutex_unlock(&trace_probe_ops.regex_lock); free_ftrace_hash(hash);