Netdev List
 help / color / mirror / Atom feed
* [PATCH net v1 1/1] net: usb: asix: ax88772: Increase phy_name size
@ 2025-03-18 16:17 Andy Shevchenko
  2025-03-18 16:49 ` Andrew Lunn
  0 siblings, 1 reply; 6+ messages in thread
From: Andy Shevchenko @ 2025-03-18 16:17 UTC (permalink / raw)
  To: Andy Shevchenko, linux-usb, netdev, linux-kernel
  Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni

GCC compiler (Debian 14.2.0-17) is not happy about printing
into a short buffer (when build with `make W=1`):

 drivers/net/usb/ax88172a.c: In function ‘ax88172a_reset’:
 include/linux/phy.h:312:20: error: ‘%s’ directive output may be truncated writing up to 60 bytes into a region of size 20 [-Werror=format-truncation=]

Indeed, the buffer size is chosen based on some assumptions, while
in general the assigned name might not fit. Increase the buffer to
cover maximum length of the parameters. With that, change snprintf()
to use sizeof() instead of hard coded number.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/net/usb/ax88172a.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/usb/ax88172a.c b/drivers/net/usb/ax88172a.c
index e47bb125048d..7844eb02a4c7 100644
--- a/drivers/net/usb/ax88172a.c
+++ b/drivers/net/usb/ax88172a.c
@@ -18,7 +18,7 @@
 struct ax88172a_private {
 	struct mii_bus *mdio;
 	struct phy_device *phydev;
-	char phy_name[20];
+	char phy_name[MII_BUS_ID_SIZE + 5];
 	u16 phy_addr;
 	u16 oldmode;
 	int use_embdphy;
@@ -308,7 +308,7 @@ static int ax88172a_reset(struct usbnet *dev)
 		   rx_ctl);
 
 	/* Connect to PHY */
-	snprintf(priv->phy_name, 20, PHY_ID_FMT,
+	snprintf(priv->phy_name, sizeof(priv->phy_name), PHY_ID_FMT,
 		 priv->mdio->id, priv->phy_addr);
 
 	priv->phydev = phy_connect(dev->net, priv->phy_name,
-- 
2.47.2


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

* Re: [PATCH net v1 1/1] net: usb: asix: ax88772: Increase phy_name size
  2025-03-18 16:17 [PATCH net v1 1/1] net: usb: asix: ax88772: Increase phy_name size Andy Shevchenko
@ 2025-03-18 16:49 ` Andrew Lunn
  2025-03-18 16:54   ` Andy Shevchenko
  0 siblings, 1 reply; 6+ messages in thread
From: Andrew Lunn @ 2025-03-18 16:49 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: linux-usb, netdev, linux-kernel, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni

>  struct ax88172a_private {
>  	struct mii_bus *mdio;
>  	struct phy_device *phydev;
> -	char phy_name[20];
> +	char phy_name[MII_BUS_ID_SIZE + 5];

Could you explain the + 5?

https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/davicom/dm9051.c#L1156
https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/freescale/fec_main.c#L2454
https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/xilinx/ll_temac.h#L348

The consensus seems to be + 3.

	Andrew

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

* Re: [PATCH net v1 1/1] net: usb: asix: ax88772: Increase phy_name size
  2025-03-18 16:49 ` Andrew Lunn
@ 2025-03-18 16:54   ` Andy Shevchenko
  2025-03-18 17:09     ` Andrew Lunn
  0 siblings, 1 reply; 6+ messages in thread
From: Andy Shevchenko @ 2025-03-18 16:54 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: linux-usb, netdev, linux-kernel, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni

On Tue, Mar 18, 2025 at 05:49:05PM +0100, Andrew Lunn wrote:

...

> > -	char phy_name[20];
> > +	char phy_name[MII_BUS_ID_SIZE + 5];
> 
> Could you explain the + 5?
> 
> https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/davicom/dm9051.c#L1156
> https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/freescale/fec_main.c#L2454
> https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/xilinx/ll_temac.h#L348
> 
> The consensus seems to be + 3.

u16, gcc can't proove the range, it assumes 65536 is the maximum.

include/linux/phy.h:312:20: note: directive argument in the range [0, 65535]

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH net v1 1/1] net: usb: asix: ax88772: Increase phy_name size
  2025-03-18 16:54   ` Andy Shevchenko
@ 2025-03-18 17:09     ` Andrew Lunn
  2025-03-19 10:35       ` Andy Shevchenko
  0 siblings, 1 reply; 6+ messages in thread
From: Andrew Lunn @ 2025-03-18 17:09 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: linux-usb, netdev, linux-kernel, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni

On Tue, Mar 18, 2025 at 06:54:48PM +0200, Andy Shevchenko wrote:
> On Tue, Mar 18, 2025 at 05:49:05PM +0100, Andrew Lunn wrote:
> 
> ...
> 
> > > -	char phy_name[20];
> > > +	char phy_name[MII_BUS_ID_SIZE + 5];
> > 
> > Could you explain the + 5?
> > 
> > https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/davicom/dm9051.c#L1156
> > https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/freescale/fec_main.c#L2454
> > https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/xilinx/ll_temac.h#L348
> > 
> > The consensus seems to be + 3.
> 
> u16, gcc can't proove the range, it assumes 65536 is the maximum.
> 
> include/linux/phy.h:312:20: note: directive argument in the range [0, 65535]

How about after

        ret = asix_read_phy_addr(dev, priv->use_embdphy);
	if (ret < 0)
		goto free;

add

        if (ret > 31) {
	        netdev_err(dev->net, "Invalid PHY ID %d\n", ret);
	        return -ENODEV;
	}

and see if GCC can follow that?

	Andrew

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

* Re: [PATCH net v1 1/1] net: usb: asix: ax88772: Increase phy_name size
  2025-03-18 17:09     ` Andrew Lunn
@ 2025-03-19 10:35       ` Andy Shevchenko
  2025-03-19 10:49         ` Andy Shevchenko
  0 siblings, 1 reply; 6+ messages in thread
From: Andy Shevchenko @ 2025-03-19 10:35 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: linux-usb, netdev, linux-kernel, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni

On Tue, Mar 18, 2025 at 06:09:12PM +0100, Andrew Lunn wrote:
> On Tue, Mar 18, 2025 at 06:54:48PM +0200, Andy Shevchenko wrote:
> > On Tue, Mar 18, 2025 at 05:49:05PM +0100, Andrew Lunn wrote:

...

> > > > -	char phy_name[20];
> > > > +	char phy_name[MII_BUS_ID_SIZE + 5];
> > > 
> > > Could you explain the + 5?
> > > 
> > > https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/davicom/dm9051.c#L1156
> > > https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/freescale/fec_main.c#L2454
> > > https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/xilinx/ll_temac.h#L348
> > > 
> > > The consensus seems to be + 3.

And shouldn't it be 4 actually? %s [MII_BUS_ID_SIZE] + ':' + '%02x' + nul

> > u16, gcc can't proove the range, it assumes 65536 is the maximum.
> > 
> > include/linux/phy.h:312:20: note: directive argument in the range [0, 65535]
> 
> How about after
> 
>         ret = asix_read_phy_addr(dev, priv->use_embdphy);
> 	if (ret < 0)
> 		goto free;
> 
> add
> 
>         if (ret > 31) {
> 	        netdev_err(dev->net, "Invalid PHY ID %d\n", ret);
> 	        return -ENODEV;
> 	}
> 
> and see if GCC can follow that?

No, with + 3 it doesn't work, need + 4.

Another possibility to change the _FMT to have %02hhx instead of %02x.

Tell me which one should I take?

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH net v1 1/1] net: usb: asix: ax88772: Increase phy_name size
  2025-03-19 10:35       ` Andy Shevchenko
@ 2025-03-19 10:49         ` Andy Shevchenko
  0 siblings, 0 replies; 6+ messages in thread
From: Andy Shevchenko @ 2025-03-19 10:49 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: linux-usb, netdev, linux-kernel, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni

On Wed, Mar 19, 2025 at 12:35:21PM +0200, Andy Shevchenko wrote:
> On Tue, Mar 18, 2025 at 06:09:12PM +0100, Andrew Lunn wrote:
> > On Tue, Mar 18, 2025 at 06:54:48PM +0200, Andy Shevchenko wrote:
> > > On Tue, Mar 18, 2025 at 05:49:05PM +0100, Andrew Lunn wrote:

...

> > > > > -	char phy_name[20];
> > > > > +	char phy_name[MII_BUS_ID_SIZE + 5];
> > > > 
> > > > Could you explain the + 5?
> > > > 
> > > > https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/davicom/dm9051.c#L1156
> > > > https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/freescale/fec_main.c#L2454
> > > > https://elixir.bootlin.com/linux/v6.13.7/source/drivers/net/ethernet/xilinx/ll_temac.h#L348
> > > > 
> > > > The consensus seems to be + 3.
> 
> And shouldn't it be 4 actually? %s [MII_BUS_ID_SIZE] + ':' + '%02x' + nul
> 
> > > u16, gcc can't proove the range, it assumes 65536 is the maximum.
> > > 
> > > include/linux/phy.h:312:20: note: directive argument in the range [0, 65535]
> > 
> > How about after
> > 
> >         ret = asix_read_phy_addr(dev, priv->use_embdphy);
> > 	if (ret < 0)
> > 		goto free;
> > 
> > add
> > 
> >         if (ret > 31) {
> > 	        netdev_err(dev->net, "Invalid PHY ID %d\n", ret);
> > 	        return -ENODEV;
> > 	}
> > 
> > and see if GCC can follow that?
> 
> No, with + 3 it doesn't work, need + 4.
> 
> Another possibility to change the _FMT to have %02hhx instead of %02x.
> 
> Tell me which one should I take?

I'll make a series, because on the second though it seems that fixing
formatting string will fix the other cases at the same time.

-- 
With Best Regards,
Andy Shevchenko



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

end of thread, other threads:[~2025-03-19 10:49 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-18 16:17 [PATCH net v1 1/1] net: usb: asix: ax88772: Increase phy_name size Andy Shevchenko
2025-03-18 16:49 ` Andrew Lunn
2025-03-18 16:54   ` Andy Shevchenko
2025-03-18 17:09     ` Andrew Lunn
2025-03-19 10:35       ` Andy Shevchenko
2025-03-19 10:49         ` Andy Shevchenko

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