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

guoweikang posted 1 patch 1 year, 2 months ago
There is a newer version of this series
kernel/trace/ftrace.c | 3 +++
1 file changed, 3 insertions(+)
[PATCH] ftrace: Fix regression with module command in stack_trace_filter
Posted by guoweikang 1 year, 2 months ago
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.

Signed-off-by: guoweikang <guoweikang.kernel@gmail.com>
---
 kernel/trace/ftrace.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 71e53eaba8bc..9b17efb1a87d 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -5093,6 +5093,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)
-- 
2.25.1
Re: [PATCH] ftrace: Fix regression with module command in stack_trace_filter
Posted by Steven Rostedt 1 year, 2 months ago
On Wed, 20 Nov 2024 13:27:49 +0800
guoweikang <guoweikang.kernel@gmail.com> wrote:

> 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.

Ouch!

Thanks, I'll also mark this as stable.

-- Steve

> 
> Signed-off-by: guoweikang <guoweikang.kernel@gmail.com>
> ---
>  kernel/trace/ftrace.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
> index 71e53eaba8bc..9b17efb1a87d 100644
> --- a/kernel/trace/ftrace.c
> +++ b/kernel/trace/ftrace.c
> @@ -5093,6 +5093,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)