Re: [PATCH 2/7] net: core: Switch netif_set_mac_address() to struct sockaddr_storage
"Gustavo A. R. Silva" <[email protected]> Tue, 20 May 2025 16:47:33 -0600
| Newsgroups | org.kernel.vger.linux-wpan,org.infradead.lists.linux-nvme,org.kernel.vger.linux-hardening,org.kernel.vger.linux-hyperv,org.kernel.vger.linux-kernel,org.kernel.vger.linux-scsi,org.kernel.vger.linux-usb,org.kernel.vger.netdev,org.kernel.vger.target-devel |
|---|---|
| Message-ID | <[email protected]> |
On 20/05/25 16:31, Kees Cook wrote: > In order to avoid passing around struct sockaddr that has a size the > compiler cannot reason about (nor track at runtime), convert > netif_set_mac_address() to take struct sockaddr_storage. This is just a > cast conversion, so there is are no binary changes. Following patches > will make actual allocation changes. > > Signed-off-by: Kees Cook <[email protected]> Acked-by: Gustavo A. R. Silva <[email protected]> Thanks! -Gustavo > --- > Cc: "David S. Miller" <[email protected]> > Cc: Eric Dumazet <[email protected]> > Cc: Jakub Kicinski <[email protected]> > Cc: Paolo Abeni <[email protected]> > Cc: Simon Horman <[email protected]> > Cc: Andrew Lunn <[email protected]> > Cc: Stanislav Fomichev <[email protected]> > Cc: Cosmin Ratiu <[email protected]> > Cc: Lei Yang <[email protected]> > Cc: Kuniyuki Iwashima <[email protected]> > Cc: Ido Schimmel <[email protected]> > Cc: <[email protected]> > --- > include/linux/netdevice.h | 2 +- > net/core/dev.c | 10 +++++----- > net/core/dev_api.c | 4 ++-- > net/core/rtnetlink.c | 2 +- > 4 files changed, 9 insertions(+), 9 deletions(-) > > diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h > index ea9d335de130..47200a394a02 100644 > --- a/include/linux/netdevice.h > +++ b/include/linux/netdevice.h > @@ -4212,7 +4212,7 @@ int netif_set_mtu(struct net_device *dev, int new_mtu); > int dev_set_mtu(struct net_device *, int); > int dev_pre_changeaddr_notify(struct net_device *dev, const char *addr, > struct netlink_ext_ack *extack); > -int netif_set_mac_address(struct net_device *dev, struct sockaddr *sa, > +int netif_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss, > struct netlink_ext_ack *extack); > int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa, > struct netlink_ext_ack *extack); > diff --git a/net/core/dev.c b/net/core/dev.c > index fccf2167b235..f8c8aad7df2e 100644 > --- a/net/core/dev.c > +++ b/net/core/dev.c > @@ -9655,7 +9655,7 @@ int dev_pre_changeaddr_notify(struct net_device *dev, const char *addr, > } > EXPORT_SYMBOL(dev_pre_changeaddr_notify); > > -int netif_set_mac_address(struct net_device *dev, struct sockaddr *sa, > +int netif_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss, > struct netlink_ext_ack *extack) > { > const struct net_device_ops *ops = dev->netdev_ops; > @@ -9663,15 +9663,15 @@ int netif_set_mac_address(struct net_device *dev, struct sockaddr *sa, > > if (!ops->ndo_set_mac_address) > return -EOPNOTSUPP; > - if (sa->sa_family != dev->type) > + if (ss->ss_family != dev->type) > return -EINVAL; > if (!netif_device_present(dev)) > return -ENODEV; > - err = dev_pre_changeaddr_notify(dev, sa->sa_data, extack); > + err = dev_pre_changeaddr_notify(dev, ss->__data, extack); > if (err) > return err; > - if (memcmp(dev->dev_addr, sa->sa_data, dev->addr_len)) { > - err = ops->ndo_set_mac_address(dev, sa); > + if (memcmp(dev->dev_addr, ss->__data, dev->addr_len)) { > + err = ops->ndo_set_mac_address(dev, ss); > if (err) > return err; > } > diff --git a/net/core/dev_api.c b/net/core/dev_api.c > index f9a160ab596f..b5f293e637d9 100644 > --- a/net/core/dev_api.c > +++ b/net/core/dev_api.c > @@ -91,7 +91,7 @@ int dev_set_mac_address_user(struct net_device *dev, struct sockaddr *sa, > > down_write(&dev_addr_sem); > netdev_lock_ops(dev); > - ret = netif_set_mac_address(dev, sa, extack); > + ret = netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack); > netdev_unlock_ops(dev); > up_write(&dev_addr_sem); > > @@ -332,7 +332,7 @@ int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa, > int ret; > > netdev_lock_ops(dev); > - ret = netif_set_mac_address(dev, sa, extack); > + ret = netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack); > netdev_unlock_ops(dev); > > return ret; > diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c > index 8a914b37ef6e..9743f1c2ae3c 100644 > --- a/net/core/rtnetlink.c > +++ b/net/core/rtnetlink.c > @@ -3100,7 +3100,7 @@ static int do_setlink(const struct sk_buff *skb, struct net_device *dev, > > memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]), > dev->addr_len); > - err = netif_set_mac_address(dev, sa, extack); > + err = netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack); > kfree(sa); > if (err) { > up_write(&dev_addr_sem);