* [PATCH net-next] tracing: ipv6: Replace deprecated strcpy() with strscpy()
@ 2025-07-14 7:54 Thorsten Blum
2025-07-14 11:42 ` Guillaume Nault
2025-07-14 16:38 ` Steven Rostedt
0 siblings, 2 replies; 8+ messages in thread
From: Thorsten Blum @ 2025-07-14 7:54 UTC (permalink / raw)
To: Steven Rostedt, Masami Hiramatsu, Mathieu Desnoyers,
Guillaume Nault, Paolo Abeni, Ido Schimmel, Petr Machata
Cc: Thorsten Blum, linux-kernel, linux-trace-kernel
strcpy() is deprecated; use strscpy() instead.
Since the destination buffer has a fixed length, strscpy() automatically
determines its size using sizeof() when the size argument is omitted.
This makes the explicit size argument unnecessary - remove it.
Now, combine both if-else branches using strscpy() and the same buffer
into a single statement to simplify the code.
No functional changes intended.
Link: https://github.com/KSPP/linux/issues/88
Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
---
include/trace/events/fib6.h | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/include/trace/events/fib6.h b/include/trace/events/fib6.h
index 8d22b2e98d48..903a18836bc6 100644
--- a/include/trace/events/fib6.h
+++ b/include/trace/events/fib6.h
@@ -64,11 +64,9 @@ TRACE_EVENT(fib6_table_lookup,
__entry->dport = 0;
}
- if (res->nh && res->nh->fib_nh_dev) {
- strscpy(__entry->name, res->nh->fib_nh_dev->name, IFNAMSIZ);
- } else {
- strcpy(__entry->name, "-");
- }
+ strscpy(__entry->name, res->nh && res->nh->fib_nh_dev ?
+ res->nh->fib_nh_dev->name : "-");
+
if (res->f6i == net->ipv6.fib6_null_entry) {
in6 = (struct in6_addr *)__entry->gw;
*in6 = in6addr_any;
--
2.50.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] tracing: ipv6: Replace deprecated strcpy() with strscpy()
2025-07-14 7:54 [PATCH net-next] tracing: ipv6: Replace deprecated strcpy() with strscpy() Thorsten Blum
@ 2025-07-14 11:42 ` Guillaume Nault
2025-07-14 16:38 ` Steven Rostedt
1 sibling, 0 replies; 8+ messages in thread
From: Guillaume Nault @ 2025-07-14 11:42 UTC (permalink / raw)
To: Thorsten Blum
Cc: Steven Rostedt, Masami Hiramatsu, Mathieu Desnoyers, Paolo Abeni,
Ido Schimmel, Petr Machata, linux-kernel, linux-trace-kernel
On Mon, Jul 14, 2025 at 09:54:33AM +0200, Thorsten Blum wrote:
> strcpy() is deprecated; use strscpy() instead.
>
> Since the destination buffer has a fixed length, strscpy() automatically
> determines its size using sizeof() when the size argument is omitted.
> This makes the explicit size argument unnecessary - remove it.
>
> Now, combine both if-else branches using strscpy() and the same buffer
> into a single statement to simplify the code.
>
> No functional changes intended.
>
> Link: https://github.com/KSPP/linux/issues/88
> Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
> ---
> include/trace/events/fib6.h | 8 +++-----
> 1 file changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/include/trace/events/fib6.h b/include/trace/events/fib6.h
> index 8d22b2e98d48..903a18836bc6 100644
> --- a/include/trace/events/fib6.h
> +++ b/include/trace/events/fib6.h
> @@ -64,11 +64,9 @@ TRACE_EVENT(fib6_table_lookup,
> __entry->dport = 0;
> }
>
> - if (res->nh && res->nh->fib_nh_dev) {
> - strscpy(__entry->name, res->nh->fib_nh_dev->name, IFNAMSIZ);
> - } else {
> - strcpy(__entry->name, "-");
> - }
> + strscpy(__entry->name, res->nh && res->nh->fib_nh_dev ?
> + res->nh->fib_nh_dev->name : "-");
> +
Acked-by: Guillaume Nault <gnault@redhat.com>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] tracing: ipv6: Replace deprecated strcpy() with strscpy()
2025-07-14 7:54 [PATCH net-next] tracing: ipv6: Replace deprecated strcpy() with strscpy() Thorsten Blum
2025-07-14 11:42 ` Guillaume Nault
@ 2025-07-14 16:38 ` Steven Rostedt
2025-07-23 17:46 ` Thorsten Blum
1 sibling, 1 reply; 8+ messages in thread
From: Steven Rostedt @ 2025-07-14 16:38 UTC (permalink / raw)
To: Thorsten Blum
Cc: Masami Hiramatsu, Mathieu Desnoyers, Guillaume Nault, Paolo Abeni,
Ido Schimmel, Petr Machata, linux-kernel, linux-trace-kernel
On Mon, 14 Jul 2025 09:54:33 +0200
Thorsten Blum <thorsten.blum@linux.dev> wrote:
> diff --git a/include/trace/events/fib6.h b/include/trace/events/fib6.h
> index 8d22b2e98d48..903a18836bc6 100644
> --- a/include/trace/events/fib6.h
> +++ b/include/trace/events/fib6.h
> @@ -64,11 +64,9 @@ TRACE_EVENT(fib6_table_lookup,
> __entry->dport = 0;
> }
>
> - if (res->nh && res->nh->fib_nh_dev) {
> - strscpy(__entry->name, res->nh->fib_nh_dev->name, IFNAMSIZ);
> - } else {
> - strcpy(__entry->name, "-");
> - }
> + strscpy(__entry->name, res->nh && res->nh->fib_nh_dev ?
> + res->nh->fib_nh_dev->name : "-");
> +
> if (res->f6i == net->ipv6.fib6_null_entry) {
> in6 = (struct in6_addr *)__entry->gw;
> *in6 = in6addr_any;
Hmm, why is that string hard coded to 16 bytes and doesn't use the
dynamic string facility? Perhaps something like this?
[ I didn't even compile the below, so it may have a syntax error ]
-- Steve
diff --git a/include/trace/events/fib6.h b/include/trace/events/fib6.h
index 8d22b2e98d48..98d2edb02431 100644
--- a/include/trace/events/fib6.h
+++ b/include/trace/events/fib6.h
@@ -32,7 +32,8 @@ TRACE_EVENT(fib6_table_lookup,
__field( u16, dport )
__field( u8, proto )
__field( u8, rt_type )
- __array( char, name, IFNAMSIZ )
+ __string( name, res->nh && res->nh->fib_nh_dev ?
+ res->nh->fib_nh_dev->name : "-")
__array( __u8, gw, 16 )
),
@@ -64,11 +65,7 @@ TRACE_EVENT(fib6_table_lookup,
__entry->dport = 0;
}
- if (res->nh && res->nh->fib_nh_dev) {
- strscpy(__entry->name, res->nh->fib_nh_dev->name, IFNAMSIZ);
- } else {
- strcpy(__entry->name, "-");
- }
+ __assign_str(name);
if (res->f6i == net->ipv6.fib6_null_entry) {
in6 = (struct in6_addr *)__entry->gw;
*in6 = in6addr_any;
@@ -82,7 +79,7 @@ TRACE_EVENT(fib6_table_lookup,
__entry->tb_id, __entry->oif, __entry->iif, __entry->proto,
__entry->src, __entry->sport, __entry->dst, __entry->dport,
__entry->flowlabel, __entry->tos, __entry->scope,
- __entry->flags, __entry->name, __entry->gw, __entry->err)
+ __entry->flags, __get_str(name), __entry->gw, __entry->err)
);
#endif /* _TRACE_FIB6_H */
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] tracing: ipv6: Replace deprecated strcpy() with strscpy()
2025-07-14 16:38 ` Steven Rostedt
@ 2025-07-23 17:46 ` Thorsten Blum
2025-07-23 18:36 ` Steven Rostedt
0 siblings, 1 reply; 8+ messages in thread
From: Thorsten Blum @ 2025-07-23 17:46 UTC (permalink / raw)
To: Steven Rostedt
Cc: Masami Hiramatsu, Mathieu Desnoyers, Guillaume Nault, Paolo Abeni,
Ido Schimmel, Petr Machata, linux-kernel, linux-trace-kernel
Hi Steve,
On 14. Jul 2025, at 09:38, Steven Rostedt wrote:
>
> Hmm, why is that string hard coded to 16 bytes and doesn't use the
> dynamic string facility? Perhaps something like this?
Your commit fca8300f68fe3 changed it from __dynamic_array() to __array()
and __string() seems to be just a special version of __dynamic_array()
with a length of -1.
In the commit description you wrote: "Since the size of the name is at
most 16 bytes (defined by IFNAMSIZ), it is not worth spending the effort
to determine the size of the string."
Thanks,
Thorsten
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] tracing: ipv6: Replace deprecated strcpy() with strscpy()
2025-07-23 17:46 ` Thorsten Blum
@ 2025-07-23 18:36 ` Steven Rostedt
2025-07-23 21:15 ` Thorsten Blum
0 siblings, 1 reply; 8+ messages in thread
From: Steven Rostedt @ 2025-07-23 18:36 UTC (permalink / raw)
To: Thorsten Blum
Cc: Masami Hiramatsu, Mathieu Desnoyers, Guillaume Nault, Paolo Abeni,
Ido Schimmel, Petr Machata, linux-kernel, linux-trace-kernel
On Wed, 23 Jul 2025 10:46:12 -0700
Thorsten Blum <thorsten.blum@linux.dev> wrote:
> Your commit fca8300f68fe3 changed it from __dynamic_array() to __array()
> and __string() seems to be just a special version of __dynamic_array()
> with a length of -1.
>
> In the commit description you wrote: "Since the size of the name is at
> most 16 bytes (defined by IFNAMSIZ), it is not worth spending the effort
> to determine the size of the string."
So the original had:
__dynamic_array(char, name, IFNAMSIZ )
Which is not dynamic at all. A dynamic_array (like __string) saves the
size in meta data within the event. So basically the above is wasting
bytes to save a fixed size. If you are going to use a dynamic array,
might as well make it dynamic!
I was doing various clean ups back then so I didn't look too deeply
into this event when I made that change. I just saw the obvious waste
of space in the ring buffer.
Just to explain it in more detail. A dynamic_array has in the ring buffer:
short offset;
short len;
[..]
char name[len];
That is, 4 bytes are used to know the size of the array and where in
the event it is located. Thus the __dynamic_array() usage basically had:
short offset;
short len = IFNAMSIZ;
[..]
char name[IFNAMSIZ];
Why have the offset and length? with just __array(char, name, IFNAMSIZ}
it would be just:
char name[IFNAMSIZ];
See why I changed it?
Now, the change I'm suggesting now would make the __string() be dynamic!
short offset;
short len = strlen(res->nh && res->nh->fib_nh_dev ? res->nh->fib_nh_dev->name : "-") + 1;
[..]
char name[len];
As IFNAMSIZ is 16, and the above adds 4 bytes to the name, if the name
is less than 7 bytes or less, you save memory on the ring buffer.
2 bytes: offset
2 bytes: len;
7 bytes + '\0'
total: 12 bytes
Note, if there's only one dynamic value, it is always at least 4 bytes aligned.
-- Steve
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] tracing: ipv6: Replace deprecated strcpy() with strscpy()
2025-07-23 18:36 ` Steven Rostedt
@ 2025-07-23 21:15 ` Thorsten Blum
2025-07-23 21:21 ` Steven Rostedt
0 siblings, 1 reply; 8+ messages in thread
From: Thorsten Blum @ 2025-07-23 21:15 UTC (permalink / raw)
To: Steven Rostedt
Cc: Masami Hiramatsu, Mathieu Desnoyers, Guillaume Nault, Paolo Abeni,
Ido Schimmel, Petr Machata, linux-kernel, linux-trace-kernel
On 23. Jul 2025, at 11:36, Steven Rostedt wrote:
> On Wed, 23 Jul 2025 10:46:12 -0700 Thorsten Blum wrote:
>
>> Your commit fca8300f68fe3 changed it from __dynamic_array() to __array()
>> and __string() seems to be just a special version of __dynamic_array()
>> with a length of -1.
>>
>> In the commit description you wrote: "Since the size of the name is at
>> most 16 bytes (defined by IFNAMSIZ), it is not worth spending the effort
>> to determine the size of the string."
>
> So the original had:
>
> __dynamic_array(char, name, IFNAMSIZ )
>
> Which is not dynamic at all. A dynamic_array (like __string) saves the
> size in meta data within the event. So basically the above is wasting
> bytes to save a fixed size. If you are going to use a dynamic array,
> might as well make it dynamic!
>
> I was doing various clean ups back then so I didn't look too deeply
> into this event when I made that change. I just saw the obvious waste
> of space in the ring buffer.
>
> Just to explain it in more detail. A dynamic_array has in the ring buffer:
>
> short offset;
> short len;
> [..]
> char name[len];
>
> That is, 4 bytes are used to know the size of the array and where in
> the event it is located. Thus the __dynamic_array() usage basically had:
>
> short offset;
> short len = IFNAMSIZ;
> [..]
> char name[IFNAMSIZ];
>
> Why have the offset and length? with just __array(char, name, IFNAMSIZ}
> it would be just:
>
> char name[IFNAMSIZ];
>
> See why I changed it?
>
> Now, the change I'm suggesting now would make the __string() be dynamic!
>
> short offset;
> short len = strlen(res->nh && res->nh->fib_nh_dev ? res->nh->fib_nh_dev->name : "-") + 1;
> [..]
> char name[len];
>
> As IFNAMSIZ is 16, and the above adds 4 bytes to the name, if the name
> is less than 7 bytes or less, you save memory on the ring buffer.
>
> 2 bytes: offset
> 2 bytes: len;
> 7 bytes + '\0'
>
> total: 12 bytes
>
> Note, if there's only one dynamic value, it is always at least 4 bytes aligned.
Thanks for the detailed explanation.
I think the better change would be this then:
diff --git a/include/trace/events/fib6.h b/include/trace/events/fib6.h
index 8d22b2e98d48..3f95df1fd155 100644
--- a/include/trace/events/fib6.h
+++ b/include/trace/events/fib6.h
@@ -32,8 +32,9 @@ TRACE_EVENT(fib6_table_lookup,
__field( u16, dport )
__field( u8, proto )
__field( u8, rt_type )
- __array( char, name, IFNAMSIZ )
- __array( __u8, gw, 16 )
+ __string( name, res->nh && res->nh->fib_nh_dev ?
+ res->nh->fib_nh_dev->name : "-" )
+ __array( __u8, gw, 16 )
),
TP_fast_assign(
@@ -64,11 +65,8 @@ TRACE_EVENT(fib6_table_lookup,
__entry->dport = 0;
}
- if (res->nh && res->nh->fib_nh_dev) {
- strscpy(__entry->name, res->nh->fib_nh_dev->name, IFNAMSIZ);
- } else {
- strcpy(__entry->name, "-");
- }
+ __assign_str(name);
+
if (res->f6i == net->ipv6.fib6_null_entry) {
in6 = (struct in6_addr *)__entry->gw;
*in6 = in6addr_any;
@@ -82,7 +80,7 @@ TRACE_EVENT(fib6_table_lookup,
__entry->tb_id, __entry->oif, __entry->iif, __entry->proto,
__entry->src, __entry->sport, __entry->dst, __entry->dport,
__entry->flowlabel, __entry->tos, __entry->scope,
- __entry->flags, __entry->name, __entry->gw, __entry->err)
+ __entry->flags, __get_str(name), __entry->gw, __entry->err)
);
#endif /* _TRACE_FIB6_H */
I'll submit a v2 if you agree that this is correct.
Thanks,
Thorsten
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] tracing: ipv6: Replace deprecated strcpy() with strscpy()
2025-07-23 21:15 ` Thorsten Blum
@ 2025-07-23 21:21 ` Steven Rostedt
2025-07-23 21:30 ` Thorsten Blum
0 siblings, 1 reply; 8+ messages in thread
From: Steven Rostedt @ 2025-07-23 21:21 UTC (permalink / raw)
To: Thorsten Blum
Cc: Masami Hiramatsu, Mathieu Desnoyers, Guillaume Nault, Paolo Abeni,
Ido Schimmel, Petr Machata, linux-kernel, linux-trace-kernel
On Wed, 23 Jul 2025 14:15:02 -0700
Thorsten Blum <thorsten.blum@linux.dev> wrote:
> Thanks for the detailed explanation.
>
> I think the better change would be this then:
>
> diff --git a/include/trace/events/fib6.h b/include/trace/events/fib6.h
> index 8d22b2e98d48..3f95df1fd155 100644
> --- a/include/trace/events/fib6.h
> +++ b/include/trace/events/fib6.h
> @@ -32,8 +32,9 @@ TRACE_EVENT(fib6_table_lookup,
> __field( u16, dport )
> __field( u8, proto )
> __field( u8, rt_type )
> - __array( char, name, IFNAMSIZ )
> - __array( __u8, gw, 16 )
> + __string( name, res->nh && res->nh->fib_nh_dev ?
> + res->nh->fib_nh_dev->name : "-" )
> + __array( __u8, gw, 16 )
> ),
>
> TP_fast_assign(
> @@ -64,11 +65,8 @@ TRACE_EVENT(fib6_table_lookup,
> __entry->dport = 0;
> }
>
> - if (res->nh && res->nh->fib_nh_dev) {
> - strscpy(__entry->name, res->nh->fib_nh_dev->name, IFNAMSIZ);
> - } else {
> - strcpy(__entry->name, "-");
> - }
> + __assign_str(name);
> +
> if (res->f6i == net->ipv6.fib6_null_entry) {
> in6 = (struct in6_addr *)__entry->gw;
> *in6 = in6addr_any;
> @@ -82,7 +80,7 @@ TRACE_EVENT(fib6_table_lookup,
> __entry->tb_id, __entry->oif, __entry->iif, __entry->proto,
> __entry->src, __entry->sport, __entry->dst, __entry->dport,
> __entry->flowlabel, __entry->tos, __entry->scope,
> - __entry->flags, __entry->name, __entry->gw, __entry->err)
> + __entry->flags, __get_str(name), __entry->gw, __entry->err)
> );
>
> #endif /* _TRACE_FIB6_H */
>
>
> I'll submit a v2 if you agree that this is correct.
Isn't the above pretty much what I suggested?
-- Steve
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] tracing: ipv6: Replace deprecated strcpy() with strscpy()
2025-07-23 21:21 ` Steven Rostedt
@ 2025-07-23 21:30 ` Thorsten Blum
0 siblings, 0 replies; 8+ messages in thread
From: Thorsten Blum @ 2025-07-23 21:30 UTC (permalink / raw)
To: Steven Rostedt
Cc: Masami Hiramatsu, Mathieu Desnoyers, Guillaume Nault, Paolo Abeni,
Ido Schimmel, Petr Machata, linux-kernel, linux-trace-kernel
On 23. Jul 2025, at 14:21, Steven Rostedt wrote:
> Isn't the above pretty much what I suggested?
Ah sorry, yes it's the same. I'll blame the jet lag from traveling :)
Thanks,
Thorsten
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-07-23 21:30 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-14 7:54 [PATCH net-next] tracing: ipv6: Replace deprecated strcpy() with strscpy() Thorsten Blum
2025-07-14 11:42 ` Guillaume Nault
2025-07-14 16:38 ` Steven Rostedt
2025-07-23 17:46 ` Thorsten Blum
2025-07-23 18:36 ` Steven Rostedt
2025-07-23 21:15 ` Thorsten Blum
2025-07-23 21:21 ` Steven Rostedt
2025-07-23 21:30 ` Thorsten Blum
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).