[for-next][PATCH] ftrace: Fix regression with module command in stack_trace_filter

Steven Rostedt posted 1 patch 7 hours ago
kernel/trace/ftrace.c | 3 +++
1 file changed, 3 insertions(+)
[for-next][PATCH] ftrace: Fix regression with module command in stack_trace_filter
Posted by Steven Rostedt 7 hours ago

  git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git
trace/for-next

Head SHA1: 45af52e7d3b8560f21d139b3759735eead8b1653


guoweikang (1):
      ftrace: Fix regression with module command in stack_trace_filter

----
 kernel/trace/ftrace.c | 3 +++
 1 file changed, 3 insertions(+)
---------------------------
commit 45af52e7d3b8560f21d139b3759735eead8b1653
Author: guoweikang <guoweikang.kernel@gmail.com>
Date:   Wed Nov 20 13:27:49 2024 +0800

    ftrace: Fix regression with module command in stack_trace_filter
    
    When executing the following command:
    
        # echo "write*:mod:ext3" > /sys/kernel/tracing/stack_trace_filter
    
    The current mod command causes a null pointer dereference. While commit
    0f17976568b3f ("ftrace: Fix regression with module command in stack_trace_filter")
    has addressed part of the issue, it left a corner case unhandled, which still
    results in a kernel crash.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://lore.kernel.org/20241120052750.275463-1-guoweikang.kernel@gmail.com
    Fixes: 04ec7bb642b77 ("tracing: Have the trace_array hold the list of registered func probes");
    Signed-off-by: guoweikang <guoweikang.kernel@gmail.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 4c28dd177ca6..5ff0822342ac 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -5076,6 +5076,9 @@ ftrace_mod_callback(struct trace_array *tr, struct ftrace_hash *hash,
 	char *func;
 	int ret;
 
+	if (!tr)
+		return -ENODEV;
+
 	/* match_records() modifies func, and we need the original */
 	func = kstrdup(func_orig, GFP_KERNEL);
 	if (!func)