From nobody Fri Dec 19 12:45:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 28171263C75; Tue, 20 May 2025 22:31:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747780275; cv=none; b=KXfrMa7xbnjzE2OyCcqNAxS42W+f//snHrXBnkN52/rjISSG4pm19jBlRBVIZvmORXJvHpvATMUpwNtHt4onYvKp/yofreFGhJ7xC0WtkDtc0tFAd+1Z0SY8Ie0kQ4nvj/F9xh2CdKp+VhguP9QYqpcrXiRbuPC2jwFFhLaTffs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747780275; c=relaxed/simple; bh=mzzoyzRluap42rrRkUTo8gz+8qcHou3FTqBfP5MNKeo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=lnabksR9V+18a4v8E1uw6RM7DQb4QKX4b34jf6JUrU6J4tJr2ONJd+aD8Nkbr3l2S2oihzuI7kNUJo1hWgQ2VneWf9RDPJwFQ5K3kY1AL6gPsa4Ryra9OHVHBYLNs69lGwAE+nZCbVRY6OXynooO5bJh03MsupcxEzQWmkKnAe8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mtb8Y17i; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mtb8Y17i" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 96A69C4CEF4; Tue, 20 May 2025 22:31:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1747780274; bh=mzzoyzRluap42rrRkUTo8gz+8qcHou3FTqBfP5MNKeo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mtb8Y17iUvR61N5cajxYkIaK6YoIqb9lyrvnSV/GDGRt39AD/s069d90Fbnk6OIRJ msLSMKqPD5jPVZuQ2VrBBz7KWyNA+ZKfK6Xl/Z4o8X/2cPxF30DkXFUIpG71y6QW30 X7Hy0xCNjo8fS+RgM/wYEXJlnlf8H00gqSHNm3K1ehcENNNz43faAHlSNXgIsfrWq3 seYER3viTvfNw0qPbZrSgyTmRa+VxZ1w2gbd7i7r8GlYVwEtB23rylqqCOvIWep2OK VCHOY0gyi2c69U67xlUyXVH9xaQXetH91L/1rUnvEKfcTQUJoL/SqlMrGr2VI4outM JMVX54x7GpAqw== From: Kees Cook To: Kuniyuki Iwashima Cc: Kees Cook , Jakub Kicinski , Jay Vosburgh , Andrew Lunn , "David S. Miller" , Eric Dumazet , Paolo Abeni , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Jiri Pirko , Simon Horman , Alexander Aring , Stefan Schmidt , Miquel Raynal , Samuel Mendoza-Jonas , Paul Fertser , Hayes Wang , Douglas Anderson , Grant Grundler , Stanislav Fomichev , Cosmin Ratiu , Lei Yang , netdev@vger.kernel.org, linux-hyperv@vger.kernel.org, linux-usb@vger.kernel.org, linux-wpan@vger.kernel.org, Christoph Hellwig , Sagi Grimberg , Chaitanya Kulkarni , "Martin K. Petersen" , Mike Christie , Max Gurtovoy , Maurizio Lombardi , Dmitry Bogdanov , Mingzhe Zou , Christophe Leroy , "Dr. David Alan Gilbert" , Ido Schimmel , Eric Biggers , Milan Broz , Philipp Hahn , Ard Biesheuvel , Al Viro , Ahmed Zaki , Alexander Lobakin , Xiao Liang , linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [PATCH 6/7] net: core: Convert dev_set_mac_address() to struct sockaddr_storage Date: Tue, 20 May 2025 15:31:05 -0700 Message-Id: <20250520223108.2672023-6-kees@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250520222452.work.063-kees@kernel.org> References: <20250520222452.work.063-kees@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=11714; i=kees@kernel.org; h=from:subject; bh=mzzoyzRluap42rrRkUTo8gz+8qcHou3FTqBfP5MNKeo=; b=owGbwMvMwCVmps19z/KJym7G02pJDBm6TKsq/ojnfjh4ddJaR/OkX+9eGThrblYSCijeIvlgm sdBBYW3HaUsDGJcDLJiiixBdu5xLh5v28Pd5yrCzGFlAhnCwMUpABP5+piR4Ur2r023fd+8Pqjo UDdL50fkn4YMCQYm+WMV8c+UvZ4/3M/wm237ZPdH8w4eriwW9Wiq+ZekzbD+X0G73YkeseWLF/S KMgEA X-Developer-Key: i=kees@kernel.org; a=openpgp; fpr=A5C3F68F229DD60F723E6E138972F4DFDC6DC026 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" All users of dev_set_mac_address() are now using a struct sockaddr_storage. Convert the internal data type to struct sockaddr_storage, drop the casts, and update pointer types. Signed-off-by: Kees Cook Acked-by: Gustavo A. R. Silva --- Cc: Jakub Kicinski Cc: Jay Vosburgh Cc: Andrew Lunn Cc: "David S. Miller" Cc: Eric Dumazet Cc: Paolo Abeni Cc: "K. Y. Srinivasan" Cc: Haiyang Zhang Cc: Wei Liu Cc: Dexuan Cui Cc: Jiri Pirko Cc: Simon Horman Cc: Alexander Aring Cc: Stefan Schmidt Cc: Miquel Raynal Cc: Samuel Mendoza-Jonas Cc: Paul Fertser Cc: Hayes Wang Cc: Douglas Anderson Cc: Grant Grundler Cc: Stanislav Fomichev Cc: Cosmin Ratiu Cc: Lei Yang Cc: Cc: Cc: Cc: --- include/linux/netdevice.h | 2 +- drivers/net/bonding/bond_alb.c | 8 +++----- drivers/net/bonding/bond_main.c | 10 ++++------ drivers/net/hyperv/netvsc_drv.c | 6 +++--- drivers/net/macvlan.c | 10 +++++----- drivers/net/team/team_core.c | 2 +- drivers/net/usb/r8152.c | 2 +- net/core/dev.c | 1 + net/core/dev_api.c | 6 +++--- net/ieee802154/nl-phy.c | 2 +- net/ncsi/ncsi-manage.c | 2 +- 11 files changed, 24 insertions(+), 27 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 47200a394a02..b4242b997373 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -4214,7 +4214,7 @@ 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_storage = *ss, struct netlink_ext_ack *extack); -int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa, +int dev_set_mac_address(struct net_device *dev, struct sockaddr_storage *s= s, struct netlink_ext_ack *extack); int dev_set_mac_address_user(struct net_device *dev, struct sockaddr *sa, struct netlink_ext_ack *extack); diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c index 7edf0fd58c34..2d37b07c8215 100644 --- a/drivers/net/bonding/bond_alb.c +++ b/drivers/net/bonding/bond_alb.c @@ -1035,7 +1035,7 @@ static int alb_set_slave_mac_addr(struct slave *slave= , const u8 addr[], */ memcpy(ss.__data, addr, len); ss.ss_family =3D dev->type; - if (dev_set_mac_address(dev, (struct sockaddr *)&ss, NULL)) { + if (dev_set_mac_address(dev, &ss, NULL)) { slave_err(slave->bond->dev, dev, "dev_set_mac_address on slave failed! A= LB mode requires that the base driver support setting the hw address also w= hen the network device's interface is open\n"); return -EOPNOTSUPP; } @@ -1273,8 +1273,7 @@ static int alb_set_mac_address(struct bonding *bond, = void *addr) break; bond_hw_addr_copy(tmp_addr, rollback_slave->dev->dev_addr, rollback_slave->dev->addr_len); - dev_set_mac_address(rollback_slave->dev, - (struct sockaddr *)&ss, NULL); + dev_set_mac_address(rollback_slave->dev, &ss, NULL); dev_addr_set(rollback_slave->dev, tmp_addr); } =20 @@ -1763,8 +1762,7 @@ void bond_alb_handle_active_change(struct bonding *bo= nd, struct slave *new_slave bond->dev->addr_len); ss.ss_family =3D bond->dev->type; /* we don't care if it can't change its mac, best effort */ - dev_set_mac_address(new_slave->dev, (struct sockaddr *)&ss, - NULL); + dev_set_mac_address(new_slave->dev, &ss, NULL); =20 dev_addr_set(new_slave->dev, tmp_addr); } diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_mai= n.c index 98cf4486fcee..b92e8935d686 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -1112,8 +1112,7 @@ static void bond_do_fail_over_mac(struct bonding *bon= d, ss.ss_family =3D bond->dev->type; } =20 - rv =3D dev_set_mac_address(new_active->dev, - (struct sockaddr *)&ss, NULL); + rv =3D dev_set_mac_address(new_active->dev, &ss, NULL); if (rv) { slave_err(bond->dev, new_active->dev, "Error %d setting MAC of new acti= ve slave\n", -rv); @@ -1127,8 +1126,7 @@ static void bond_do_fail_over_mac(struct bonding *bon= d, new_active->dev->addr_len); ss.ss_family =3D old_active->dev->type; =20 - rv =3D dev_set_mac_address(old_active->dev, - (struct sockaddr *)&ss, NULL); + rv =3D dev_set_mac_address(old_active->dev, &ss, NULL); if (rv) slave_err(bond->dev, old_active->dev, "Error %d setting MAC of old acti= ve slave\n", -rv); @@ -2455,7 +2453,7 @@ int bond_enslave(struct net_device *bond_dev, struct = net_device *slave_dev, bond_hw_addr_copy(ss.__data, new_slave->perm_hwaddr, new_slave->dev->addr_len); ss.ss_family =3D slave_dev->type; - dev_set_mac_address(slave_dev, (struct sockaddr *)&ss, NULL); + dev_set_mac_address(slave_dev, &ss, NULL); } =20 err_restore_mtu: @@ -2649,7 +2647,7 @@ static int __bond_release_one(struct net_device *bond= _dev, bond_hw_addr_copy(ss.__data, slave->perm_hwaddr, slave->dev->addr_len); ss.ss_family =3D slave_dev->type; - dev_set_mac_address(slave_dev, (struct sockaddr *)&ss, NULL); + dev_set_mac_address(slave_dev, &ss, NULL); } =20 if (unregister) { diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_dr= v.c index d8b169ac0343..14a0d04e21ae 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -1371,7 +1371,7 @@ static int netvsc_set_mac_addr(struct net_device *nde= v, void *p) struct net_device_context *ndc =3D netdev_priv(ndev); struct net_device *vf_netdev =3D rtnl_dereference(ndc->vf_netdev); struct netvsc_device *nvdev =3D rtnl_dereference(ndc->nvdev); - struct sockaddr *addr =3D p; + struct sockaddr_storage *addr =3D p; int err; =20 err =3D eth_prepare_mac_addr_change(ndev, p); @@ -1387,12 +1387,12 @@ static int netvsc_set_mac_addr(struct net_device *n= dev, void *p) return err; } =20 - err =3D rndis_filter_set_device_mac(nvdev, addr->sa_data); + err =3D rndis_filter_set_device_mac(nvdev, addr->__data); if (!err) { eth_commit_mac_addr_change(ndev, p); } else if (vf_netdev) { /* rollback change on VF */ - memcpy(addr->sa_data, ndev->dev_addr, ETH_ALEN); + memcpy(addr->__data, ndev->dev_addr, ETH_ALEN); dev_set_mac_address(vf_netdev, addr, NULL); } =20 diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 7045b1d58754..69e879780c36 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -754,13 +754,13 @@ static int macvlan_sync_address(struct net_device *de= v, static int macvlan_set_mac_address(struct net_device *dev, void *p) { struct macvlan_dev *vlan =3D netdev_priv(dev); - struct sockaddr *addr =3D p; + struct sockaddr_storage *addr =3D p; =20 - if (!is_valid_ether_addr(addr->sa_data)) + if (!is_valid_ether_addr(addr->__data)) return -EADDRNOTAVAIL; =20 /* If the addresses are the same, this is a no-op */ - if (ether_addr_equal(dev->dev_addr, addr->sa_data)) + if (ether_addr_equal(dev->dev_addr, addr->__data)) return 0; =20 if (vlan->mode =3D=3D MACVLAN_MODE_PASSTHRU) { @@ -768,10 +768,10 @@ static int macvlan_set_mac_address(struct net_device = *dev, void *p) return dev_set_mac_address(vlan->lowerdev, addr, NULL); } =20 - if (macvlan_addr_busy(vlan->port, addr->sa_data)) + if (macvlan_addr_busy(vlan->port, addr->__data)) return -EADDRINUSE; =20 - return macvlan_sync_address(dev, addr->sa_data); + return macvlan_sync_address(dev, addr->__data); } =20 static void macvlan_change_rx_flags(struct net_device *dev, int change) diff --git a/drivers/net/team/team_core.c b/drivers/net/team/team_core.c index d8fc0c79745d..a64e661c21a1 100644 --- a/drivers/net/team/team_core.c +++ b/drivers/net/team/team_core.c @@ -55,7 +55,7 @@ static int __set_port_dev_addr(struct net_device *port_de= v, =20 memcpy(addr.__data, dev_addr, port_dev->addr_len); addr.ss_family =3D port_dev->type; - return dev_set_mac_address(port_dev, (struct sockaddr *)&addr, NULL); + return dev_set_mac_address(port_dev, &addr, NULL); } =20 static int team_port_set_orig_dev_addr(struct team_port *port) diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c index b18dee1b1bb3..d6589b24c68d 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c @@ -8432,7 +8432,7 @@ static int rtl8152_post_reset(struct usb_interface *i= ntf) =20 /* reset the MAC address in case of policy change */ if (determine_ethernet_addr(tp, &ss) >=3D 0) - dev_set_mac_address(tp->netdev, (struct sockaddr *)&ss, NULL); + dev_set_mac_address(tp->netdev, &ss, NULL); =20 netdev =3D tp->netdev; if (!netif_running(netdev)) diff --git a/net/core/dev.c b/net/core/dev.c index f8c8aad7df2e..1f1900ec26b2 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -9683,6 +9683,7 @@ int netif_set_mac_address(struct net_device *dev, str= uct sockaddr_storage *ss, =20 DECLARE_RWSEM(dev_addr_sem); =20 +/* "sa" is a true struct sockaddr with limited "sa_data" member. */ int dev_get_mac_address(struct sockaddr *sa, struct net *net, char *dev_na= me) { size_t size =3D sizeof(sa->sa_data_min); diff --git a/net/core/dev_api.c b/net/core/dev_api.c index b5f293e637d9..e80404e76ca9 100644 --- a/net/core/dev_api.c +++ b/net/core/dev_api.c @@ -319,20 +319,20 @@ EXPORT_SYMBOL(dev_set_allmulti); /** * dev_set_mac_address() - change Media Access Control Address * @dev: device - * @sa: new address + * @ss: new address * @extack: netlink extended ack * * Change the hardware (MAC) address of the device * * Return: 0 on success, -errno on failure. */ -int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa, +int dev_set_mac_address(struct net_device *dev, struct sockaddr_storage *s= s, struct netlink_ext_ack *extack) { int ret; =20 netdev_lock_ops(dev); - ret =3D netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack); + ret =3D netif_set_mac_address(dev, sa, extack); netdev_unlock_ops(dev); =20 return ret; diff --git a/net/ieee802154/nl-phy.c b/net/ieee802154/nl-phy.c index ee2b190e8e0d..4c07a475c567 100644 --- a/net/ieee802154/nl-phy.c +++ b/net/ieee802154/nl-phy.c @@ -234,7 +234,7 @@ int ieee802154_add_iface(struct sk_buff *skb, struct ge= nl_info *info) * dev_set_mac_address require RTNL_LOCK */ rtnl_lock(); - rc =3D dev_set_mac_address(dev, (struct sockaddr *)&addr, NULL); + rc =3D dev_set_mac_address(dev, &addr, NULL); rtnl_unlock(); if (rc) goto dev_unregister; diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c index 0202db2aea3e..b36947063783 100644 --- a/net/ncsi/ncsi-manage.c +++ b/net/ncsi/ncsi-manage.c @@ -1058,7 +1058,7 @@ static void ncsi_configure_channel(struct ncsi_dev_pr= iv *ndp) break; case ncsi_dev_state_config_apply_mac: rtnl_lock(); - ret =3D dev_set_mac_address(dev, (struct sockaddr *)&ndp->pending_mac, N= ULL); + ret =3D dev_set_mac_address(dev, &ndp->pending_mac, NULL); rtnl_unlock(); if (ret < 0) netdev_warn(dev, "NCSI: 'Writing MAC address to device failed\n"); --=20 2.34.1