Message ID | 20210613115820.1525478-2-code@reto-schneider.ch |
---|---|
State | New |
Headers | show |
Series | None | expand |
Hi Russell, On 13.06.21 14:20, Russell King (Oracle) wrote: > Please don't use strncpy() - this is a good example why strncpy() is bad > news. > > * strncpy - Copy a length-limited, C-string > * @dest: Where to copy the string to > * @src: Where to copy the string from > * @count: The maximum number of bytes to copy > * > * The result is not %NUL-terminated if the source exceeds > * @count bytes. > > Consequently, if "name" is IFNAMSIZ bytes or longer, > eth->netdev[id]->name will not be NUL terminated, and subsequent use > will run off the end of the string. strscpy() is safer to use here. Thanks a lot for finding this (embarrassing mistake) and pointing me in the right direction (did dot know about strscpy). Will send v2 soon. Kind regards, Reto
From: Reto Schneider <code@reto-schneider.ch> Date: Sun, 13 Jun 2021 13:58:19 +0200 > From: Reto Schneider <reto.schneider@husqvarnagroup.com> > > Name the MAC interface name according to the label property. If the > property is missing, the default name (ethX) gets used. > > Signed-off-by: Reto Schneider <reto.schneider@husqvarnagroup.com> Please solve naming issues in userspace via udev, thank you.
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c index 64adfd24e134..8bb09801918f 100644 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c @@ -2948,6 +2948,7 @@ static const struct net_device_ops mtk_netdev_ops = { static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np) { const __be32 *_id = of_get_property(np, "reg", NULL); + const char *const name = of_get_property(np, "label", NULL); phy_interface_t phy_mode; struct phylink *phylink; struct mtk_mac *mac; @@ -3020,6 +3021,9 @@ static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np) mac->phylink = phylink; + if (name) + strncpy(eth->netdev[id]->name, name, IFNAMSIZ); + SET_NETDEV_DEV(eth->netdev[id], eth->dev); eth->netdev[id]->watchdog_timeo = 5 * HZ; eth->netdev[id]->netdev_ops = &mtk_netdev_ops;