diff mbox series

net: macb: Truncate TX1519CNT for trailing NUL

Message ID 20250310222415.work.815-kees@kernel.org (mailing list archive)
State New
Headers show
Series net: macb: Truncate TX1519CNT for trailing NUL | expand

Commit Message

Kees Cook March 10, 2025, 10:24 p.m. UTC
GCC 15's -Wunterminated-string-initialization saw that this string was
being truncated. Adjust the initializer so that the needed final NUL
character will be present.

Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
Cc: Claudiu Beznea <claudiu.beznea@tuxon.dev>
Cc: Andrew Lunn <andrew+netdev@lunn.ch>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: netdev@vger.kernel.org
Signed-off-by: Kees Cook <kees@kernel.org>
---
 drivers/net/ethernet/cadence/macb.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Michal Swiatkowski March 11, 2025, 7:27 a.m. UTC | #1
On Mon, Mar 10, 2025 at 03:24:16PM -0700, Kees Cook wrote:
> GCC 15's -Wunterminated-string-initialization saw that this string was
> being truncated. Adjust the initializer so that the needed final NUL
> character will be present.
> 
> Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
> Cc: Claudiu Beznea <claudiu.beznea@tuxon.dev>
> Cc: Andrew Lunn <andrew+netdev@lunn.ch>
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Eric Dumazet <edumazet@google.com>
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: Paolo Abeni <pabeni@redhat.com>
> Cc: netdev@vger.kernel.org
> Signed-off-by: Kees Cook <kees@kernel.org>
> ---
>  drivers/net/ethernet/cadence/macb.h | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h
> index 2847278d9cd4..9a6acb97c82d 100644
> --- a/drivers/net/ethernet/cadence/macb.h
> +++ b/drivers/net/ethernet/cadence/macb.h
> @@ -1067,7 +1067,8 @@ static const struct gem_statistic gem_statistics[] = {
>  	GEM_STAT_TITLE(TX256CNT, "tx_256_511_byte_frames"),
>  	GEM_STAT_TITLE(TX512CNT, "tx_512_1023_byte_frames"),
>  	GEM_STAT_TITLE(TX1024CNT, "tx_1024_1518_byte_frames"),
> -	GEM_STAT_TITLE(TX1519CNT, "tx_greater_than_1518_byte_frames"),
> +	GEM_STAT_TITLE(TX1519CNT, "tx_greater_than_1518_byte_frame"),
> +
>  	GEM_STAT_TITLE_BITS(TXURUNCNT, "tx_underrun",
>  			    GEM_BIT(NDS_TXERR)|GEM_BIT(NDS_TXFIFOERR)),
>  	GEM_STAT_TITLE_BITS(SNGLCOLLCNT, "tx_single_collision_frames",

"rx_greater_than_1518_byte_frames" is also 32, probably you should fix
that too.

Thanks

> -- 
> 2.34.1
>
Andrew Lunn March 11, 2025, 2:12 p.m. UTC | #2
On Mon, Mar 10, 2025 at 03:24:16PM -0700, Kees Cook wrote:
> GCC 15's -Wunterminated-string-initialization saw that this string was
> being truncated. Adjust the initializer so that the needed final NUL
> character will be present.

This is where we get into the ugliness of the ethtool API for strings.
It is not actually NUL terminated. The code uses memcpy(), see:

https://elixir.bootlin.com/linux/v6.13.6/source/drivers/net/ethernet/cadence/macb_main.c#L3193

The kAPI is that userspace provides a big buffer, and the kernel then
copies these strings into the buffer at 32 byte offsets. There is no
requirement for a NUL between them since they are all 32 bytes long.

	Andrew
Kees Cook March 11, 2025, 10:38 p.m. UTC | #3
On Tue, Mar 11, 2025 at 08:27:45AM +0100, Michal Swiatkowski wrote:
> On Mon, Mar 10, 2025 at 03:24:16PM -0700, Kees Cook wrote:
> > GCC 15's -Wunterminated-string-initialization saw that this string was
> > being truncated. Adjust the initializer so that the needed final NUL
> > character will be present.
> > 
> > Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
> > Cc: Claudiu Beznea <claudiu.beznea@tuxon.dev>
> > Cc: Andrew Lunn <andrew+netdev@lunn.ch>
> > Cc: "David S. Miller" <davem@davemloft.net>
> > Cc: Eric Dumazet <edumazet@google.com>
> > Cc: Jakub Kicinski <kuba@kernel.org>
> > Cc: Paolo Abeni <pabeni@redhat.com>
> > Cc: netdev@vger.kernel.org
> > Signed-off-by: Kees Cook <kees@kernel.org>
> > ---
> >  drivers/net/ethernet/cadence/macb.h | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h
> > index 2847278d9cd4..9a6acb97c82d 100644
> > --- a/drivers/net/ethernet/cadence/macb.h
> > +++ b/drivers/net/ethernet/cadence/macb.h
> > @@ -1067,7 +1067,8 @@ static const struct gem_statistic gem_statistics[] = {
> >  	GEM_STAT_TITLE(TX256CNT, "tx_256_511_byte_frames"),
> >  	GEM_STAT_TITLE(TX512CNT, "tx_512_1023_byte_frames"),
> >  	GEM_STAT_TITLE(TX1024CNT, "tx_1024_1518_byte_frames"),
> > -	GEM_STAT_TITLE(TX1519CNT, "tx_greater_than_1518_byte_frames"),
> > +	GEM_STAT_TITLE(TX1519CNT, "tx_greater_than_1518_byte_frame"),
> > +
> >  	GEM_STAT_TITLE_BITS(TXURUNCNT, "tx_underrun",
> >  			    GEM_BIT(NDS_TXERR)|GEM_BIT(NDS_TXFIFOERR)),
> >  	GEM_STAT_TITLE_BITS(SNGLCOLLCNT, "tx_single_collision_frames",
> 
> "rx_greater_than_1518_byte_frames" is also 32, probably you should fix
> that too.

Ah! So it is, thank you. I must have missed it while grinding through
all the warnings I was working on. I will adjust this!
Kees Cook March 11, 2025, 10:41 p.m. UTC | #4
On Tue, Mar 11, 2025 at 03:12:00PM +0100, Andrew Lunn wrote:
> On Mon, Mar 10, 2025 at 03:24:16PM -0700, Kees Cook wrote:
> > GCC 15's -Wunterminated-string-initialization saw that this string was
> > being truncated. Adjust the initializer so that the needed final NUL
> > character will be present.
> 
> This is where we get into the ugliness of the ethtool API for strings.
> It is not actually NUL terminated. The code uses memcpy(), see:
> 
> https://elixir.bootlin.com/linux/v6.13.6/source/drivers/net/ethernet/cadence/macb_main.c#L3193
> 
> The kAPI is that userspace provides a big buffer, and the kernel then
> copies these strings into the buffer at 32 byte offsets. There is no
> requirement for a NUL between them since they are all 32 bytes long.

Oh right! Yes, I always forget these are not NUL terminated. Okay, I
will resend this with a proper __nonstring annotation. I see the title
use in drivers/net/ethernet/cadence/macb_main.c and can confirm it's not
using C String APIs.
diff mbox series

Patch

diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h
index 2847278d9cd4..9a6acb97c82d 100644
--- a/drivers/net/ethernet/cadence/macb.h
+++ b/drivers/net/ethernet/cadence/macb.h
@@ -1067,7 +1067,8 @@  static const struct gem_statistic gem_statistics[] = {
 	GEM_STAT_TITLE(TX256CNT, "tx_256_511_byte_frames"),
 	GEM_STAT_TITLE(TX512CNT, "tx_512_1023_byte_frames"),
 	GEM_STAT_TITLE(TX1024CNT, "tx_1024_1518_byte_frames"),
-	GEM_STAT_TITLE(TX1519CNT, "tx_greater_than_1518_byte_frames"),
+	GEM_STAT_TITLE(TX1519CNT, "tx_greater_than_1518_byte_frame"),
+
 	GEM_STAT_TITLE_BITS(TXURUNCNT, "tx_underrun",
 			    GEM_BIT(NDS_TXERR)|GEM_BIT(NDS_TXFIFOERR)),
 	GEM_STAT_TITLE_BITS(SNGLCOLLCNT, "tx_single_collision_frames",