Linux Trace Kernel
 help / color / mirror / Atom feed
* [PATCH v3] tracing: Replace deprecated strncpy() with strscpy() for stack_trace_filter_buf
@ 2025-04-04 13:58 Devaansh Kumar
  2025-04-04 18:20 ` Steven Rostedt
  0 siblings, 1 reply; 3+ messages in thread
From: Devaansh Kumar @ 2025-04-04 13:58 UTC (permalink / raw)
  To: rostedt, mhiramat, mathieu.desnoyers
  Cc: Devaansh Kumar, linux-trace-kernel, linux-kernel, skhan,
	linux-kernel-mentees

strncpy() is deprecated for NUL-terminated destination buffers and must
be replaced by strscpy().

See issue: https://github.com/KSPP/linux/issues/90

Signed-off-by: Devaansh Kumar <devaanshk840@gmail.com>
---
 kernel/trace/trace_stack.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index 5a48dba912ea..91ed2b76fa4c 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -543,8 +543,10 @@ static __init int enable_stacktrace(char *str)
 {
 	int len;
 
-	if ((len = str_has_prefix(str, "_filter=")))
-		strncpy(stack_trace_filter_buf, str + len, COMMAND_LINE_SIZE);
+	len = str_has_prefix(str, "_filter=");
+
+	if (len)
+		strscpy(stack_trace_filter_buf, str + len, sizeof(stack_trace_filter_buf));
 
 	stack_tracer_enabled = 1;
 	return 1;
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] tracing: Replace deprecated strncpy() with strscpy() for stack_trace_filter_buf
  2025-04-04 13:58 [PATCH v3] tracing: Replace deprecated strncpy() with strscpy() for stack_trace_filter_buf Devaansh Kumar
@ 2025-04-04 18:20 ` Steven Rostedt
  2025-04-04 18:58   ` Devaansh Kumar
  0 siblings, 1 reply; 3+ messages in thread
From: Steven Rostedt @ 2025-04-04 18:20 UTC (permalink / raw)
  To: Devaansh Kumar
  Cc: mhiramat, mathieu.desnoyers, linux-trace-kernel, linux-kernel,
	skhan, linux-kernel-mentees

On Fri,  4 Apr 2025 19:28:48 +0530
Devaansh Kumar <devaanshk840@gmail.com> wrote:

> --- a/kernel/trace/trace_stack.c
> +++ b/kernel/trace/trace_stack.c
> @@ -543,8 +543,10 @@ static __init int enable_stacktrace(char *str)
>  {
>  	int len;
>  
> -	if ((len = str_has_prefix(str, "_filter=")))
> -		strncpy(stack_trace_filter_buf, str + len, COMMAND_LINE_SIZE);
> +	len = str_has_prefix(str, "_filter=");
> +
> +	if (len)
> +		strscpy(stack_trace_filter_buf, str + len, sizeof(stack_trace_filter_buf));
>  
>  	stack_tracer_enabled = 1;
>  	return 1;

BTW, why separate out the len? I use this notation quite a bit for
str_has_prefix() checks.

$ git grep '(len = str_has_pref' kernel/trace
kernel/trace/trace_events.c:    if (!(len = str_has_prefix(fmt, "REC->")))
kernel/trace/trace_events_filter.c:     if ((len = str_has_prefix(str + i, ".ustring"))) {
kernel/trace/trace_events_filter.c:     if ((len = str_has_prefix(str + i, ".function"))) {
kernel/trace/trace_events_hist.c:       if ((len = str_has_prefix(str, "key=")) ||
kernel/trace/trace_events_hist.c:           (len = str_has_prefix(str, "keys="))) {
kernel/trace/trace_events_hist.c:       } else if ((len = str_has_prefix(str, "val=")) ||
kernel/trace/trace_events_hist.c:                  (len = str_has_prefix(str, "vals=")) ||
kernel/trace/trace_events_hist.c:                  (len = str_has_prefix(str, "values="))) {
kernel/trace/trace_events_hist.c:       } else if ((len = str_has_prefix(str, "sort="))) {
kernel/trace/trace_events_hist.c:       } else if ((len = str_has_prefix(str, "clock="))) {
kernel/trace/trace_events_hist.c:       } else if ((len = str_has_prefix(str, "size="))) {
kernel/trace/trace_events_hist.c:               if ((len = str_has_prefix(str, "onmatch(")))
kernel/trace/trace_events_hist.c:               else if ((len = str_has_prefix(str, "onmax(")))
kernel/trace/trace_events_hist.c:               else if ((len = str_has_prefix(str, "onchange(")))
kernel/trace/trace_stack.c:     if ((len = str_has_prefix(str, "_filter=")))

It's fine being in the if statement as the if is more about "does this have
this prefix" and the length is just a side effect of it to use it to
extract the rest.

This patch is only about removing strncpy(), it doesn't need to modify the
format.

-- Steve

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] tracing: Replace deprecated strncpy() with strscpy() for stack_trace_filter_buf
  2025-04-04 18:20 ` Steven Rostedt
@ 2025-04-04 18:58   ` Devaansh Kumar
  0 siblings, 0 replies; 3+ messages in thread
From: Devaansh Kumar @ 2025-04-04 18:58 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: mhiramat, mathieu.desnoyers, linux-trace-kernel, linux-kernel,
	skhan, linux-kernel-mentees

On Fri, 4 Apr 2025 at 23:49, Steven Rostedt <rostedt@goodmis.org> wrote:
>
> On Fri,  4 Apr 2025 19:28:48 +0530
> Devaansh Kumar <devaanshk840@gmail.com> wrote:
>
> > --- a/kernel/trace/trace_stack.c
> > +++ b/kernel/trace/trace_stack.c
> > @@ -543,8 +543,10 @@ static __init int enable_stacktrace(char *str)
> >  {
> >       int len;
> >
> > -     if ((len = str_has_prefix(str, "_filter=")))
> > -             strncpy(stack_trace_filter_buf, str + len, COMMAND_LINE_SIZE);
> > +     len = str_has_prefix(str, "_filter=");
> > +
> > +     if (len)
> > +             strscpy(stack_trace_filter_buf, str + len, sizeof(stack_trace_filter_buf));
> >
> >       stack_tracer_enabled = 1;
> >       return 1;
>
> BTW, why separate out the len? I use this notation quite a bit for
> str_has_prefix() checks.
>
> $ git grep '(len = str_has_pref' kernel/trace
> kernel/trace/trace_events.c:    if (!(len = str_has_prefix(fmt, "REC->")))
> kernel/trace/trace_events_filter.c:     if ((len = str_has_prefix(str + i, ".ustring"))) {
> kernel/trace/trace_events_filter.c:     if ((len = str_has_prefix(str + i, ".function"))) {
> kernel/trace/trace_events_hist.c:       if ((len = str_has_prefix(str, "key=")) ||
> kernel/trace/trace_events_hist.c:           (len = str_has_prefix(str, "keys="))) {
> kernel/trace/trace_events_hist.c:       } else if ((len = str_has_prefix(str, "val=")) ||
> kernel/trace/trace_events_hist.c:                  (len = str_has_prefix(str, "vals=")) ||
> kernel/trace/trace_events_hist.c:                  (len = str_has_prefix(str, "values="))) {
> kernel/trace/trace_events_hist.c:       } else if ((len = str_has_prefix(str, "sort="))) {
> kernel/trace/trace_events_hist.c:       } else if ((len = str_has_prefix(str, "clock="))) {
> kernel/trace/trace_events_hist.c:       } else if ((len = str_has_prefix(str, "size="))) {
> kernel/trace/trace_events_hist.c:               if ((len = str_has_prefix(str, "onmatch(")))
> kernel/trace/trace_events_hist.c:               else if ((len = str_has_prefix(str, "onmax(")))
> kernel/trace/trace_events_hist.c:               else if ((len = str_has_prefix(str, "onchange(")))
> kernel/trace/trace_stack.c:     if ((len = str_has_prefix(str, "_filter=")))
>
> It's fine being in the if statement as the if is more about "does this have
> this prefix" and the length is just a side effect of it to use it to
> extract the rest.
>
> This patch is only about removing strncpy(), it doesn't need to modify the
> format.
>
> -- Steve

Sure I'll keep that in mind.

-- Devaansh Kumar

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-04-04 18:59 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-04 13:58 [PATCH v3] tracing: Replace deprecated strncpy() with strscpy() for stack_trace_filter_buf Devaansh Kumar
2025-04-04 18:20 ` Steven Rostedt
2025-04-04 18:58   ` Devaansh Kumar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox