Message ID | 20250310222415.work.815-kees@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | net: macb: Truncate TX1519CNT for trailing NUL | expand |
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 >
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
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!
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 --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",
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(-)