Fix accessing the __rcu pointer direct_functions with RCU protection.

Cc: [email protected]
Fixes: d05cb470663a ("ftrace: Fix modification of direct_function hash while in 
use")
Suggested-by: Steven Rostedt <[email protected]>
Signed-off-by: Leon Hwang <[email protected]>
---
 kernel/trace/ftrace.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 6c47a94f5924..c5d1d0d42ccc 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -2645,7 +2645,8 @@ unsigned long ftrace_find_rec_direct(unsigned long ip)
 {
        struct ftrace_func_entry *entry;
 
-       entry = __ftrace_lookup_ip(direct_functions, ip);
+       guard(preempt_notrace)();
+       entry = __ftrace_lookup_ip(rcu_dereference_sched(direct_functions), ip);
        if (!entry)
                return 0;
 
-- 
2.55.0


Reply via email to