Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: core: Convert dev_set_mac_address() to struct sockaddr_storage

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.

Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Signed-off-by: Kees Cook <kees@kernel.org>
Link: https://patch.msgid.link/20250521204619.2301870-6-kees@kernel.org
Signed-off-by: Paolo Abeni <pabeni@redhat.com>

authored by

Kees Cook and committed by
Paolo Abeni
9ca6804a 79deac8d

+30 -34
+3 -5
drivers/net/bonding/bond_alb.c
··· 1035 1035 */ 1036 1036 memcpy(ss.__data, addr, len); 1037 1037 ss.ss_family = dev->type; 1038 - if (dev_set_mac_address(dev, (struct sockaddr *)&ss, NULL)) { 1038 + if (dev_set_mac_address(dev, &ss, NULL)) { 1039 1039 slave_err(slave->bond->dev, dev, "dev_set_mac_address on slave failed! ALB mode requires that the base driver support setting the hw address also when the network device's interface is open\n"); 1040 1040 return -EOPNOTSUPP; 1041 1041 } ··· 1273 1273 break; 1274 1274 bond_hw_addr_copy(tmp_addr, rollback_slave->dev->dev_addr, 1275 1275 rollback_slave->dev->addr_len); 1276 - dev_set_mac_address(rollback_slave->dev, 1277 - (struct sockaddr *)&ss, NULL); 1276 + dev_set_mac_address(rollback_slave->dev, &ss, NULL); 1278 1277 dev_addr_set(rollback_slave->dev, tmp_addr); 1279 1278 } 1280 1279 ··· 1762 1763 bond->dev->addr_len); 1763 1764 ss.ss_family = bond->dev->type; 1764 1765 /* we don't care if it can't change its mac, best effort */ 1765 - dev_set_mac_address(new_slave->dev, (struct sockaddr *)&ss, 1766 - NULL); 1766 + dev_set_mac_address(new_slave->dev, &ss, NULL); 1767 1767 1768 1768 dev_addr_set(new_slave->dev, tmp_addr); 1769 1769 }
+6 -9
drivers/net/bonding/bond_main.c
··· 1112 1112 ss.ss_family = bond->dev->type; 1113 1113 } 1114 1114 1115 - rv = dev_set_mac_address(new_active->dev, 1116 - (struct sockaddr *)&ss, NULL); 1115 + rv = dev_set_mac_address(new_active->dev, &ss, NULL); 1117 1116 if (rv) { 1118 1117 slave_err(bond->dev, new_active->dev, "Error %d setting MAC of new active slave\n", 1119 1118 -rv); ··· 1126 1127 new_active->dev->addr_len); 1127 1128 ss.ss_family = old_active->dev->type; 1128 1129 1129 - rv = dev_set_mac_address(old_active->dev, 1130 - (struct sockaddr *)&ss, NULL); 1130 + rv = dev_set_mac_address(old_active->dev, &ss, NULL); 1131 1131 if (rv) 1132 1132 slave_err(bond->dev, old_active->dev, "Error %d setting MAC of old active slave\n", 1133 1133 -rv); ··· 2125 2127 } 2126 2128 2127 2129 ss.ss_family = slave_dev->type; 2128 - res = dev_set_mac_address(slave_dev, (struct sockaddr *)&ss, extack); 2130 + res = dev_set_mac_address(slave_dev, &ss, extack); 2129 2131 if (res) { 2130 2132 slave_err(bond_dev, slave_dev, "Error %d calling set_mac_address\n", res); 2131 2133 goto err_restore_mtu; ··· 2453 2455 bond_hw_addr_copy(ss.__data, new_slave->perm_hwaddr, 2454 2456 new_slave->dev->addr_len); 2455 2457 ss.ss_family = slave_dev->type; 2456 - dev_set_mac_address(slave_dev, (struct sockaddr *)&ss, NULL); 2458 + dev_set_mac_address(slave_dev, &ss, NULL); 2457 2459 } 2458 2460 2459 2461 err_restore_mtu: ··· 2647 2649 bond_hw_addr_copy(ss.__data, slave->perm_hwaddr, 2648 2650 slave->dev->addr_len); 2649 2651 ss.ss_family = slave_dev->type; 2650 - dev_set_mac_address(slave_dev, (struct sockaddr *)&ss, NULL); 2652 + dev_set_mac_address(slave_dev, &ss, NULL); 2651 2653 } 2652 2654 2653 2655 if (unregister) { ··· 4934 4936 if (rollback_slave == slave) 4935 4937 break; 4936 4938 4937 - tmp_res = dev_set_mac_address(rollback_slave->dev, 4938 - (struct sockaddr *)&tmp_ss, NULL); 4939 + tmp_res = dev_set_mac_address(rollback_slave->dev, &tmp_ss, NULL); 4939 4940 if (tmp_res) { 4940 4941 slave_dbg(bond_dev, rollback_slave->dev, "%s: unwind err %d\n", 4941 4942 __func__, tmp_res);
+3 -3
drivers/net/hyperv/netvsc_drv.c
··· 1371 1371 struct net_device_context *ndc = netdev_priv(ndev); 1372 1372 struct net_device *vf_netdev = rtnl_dereference(ndc->vf_netdev); 1373 1373 struct netvsc_device *nvdev = rtnl_dereference(ndc->nvdev); 1374 - struct sockaddr *addr = p; 1374 + struct sockaddr_storage *addr = p; 1375 1375 int err; 1376 1376 1377 1377 err = eth_prepare_mac_addr_change(ndev, p); ··· 1387 1387 return err; 1388 1388 } 1389 1389 1390 - err = rndis_filter_set_device_mac(nvdev, addr->sa_data); 1390 + err = rndis_filter_set_device_mac(nvdev, addr->__data); 1391 1391 if (!err) { 1392 1392 eth_commit_mac_addr_change(ndev, p); 1393 1393 } else if (vf_netdev) { 1394 1394 /* rollback change on VF */ 1395 - memcpy(addr->sa_data, ndev->dev_addr, ETH_ALEN); 1395 + memcpy(addr->__data, ndev->dev_addr, ETH_ALEN); 1396 1396 dev_set_mac_address(vf_netdev, addr, NULL); 1397 1397 } 1398 1398
+9 -9
drivers/net/macvlan.c
··· 754 754 static int macvlan_set_mac_address(struct net_device *dev, void *p) 755 755 { 756 756 struct macvlan_dev *vlan = netdev_priv(dev); 757 - struct sockaddr *addr = p; 757 + struct sockaddr_storage *addr = p; 758 758 759 - if (!is_valid_ether_addr(addr->sa_data)) 759 + if (!is_valid_ether_addr(addr->__data)) 760 760 return -EADDRNOTAVAIL; 761 761 762 762 /* If the addresses are the same, this is a no-op */ 763 - if (ether_addr_equal(dev->dev_addr, addr->sa_data)) 763 + if (ether_addr_equal(dev->dev_addr, addr->__data)) 764 764 return 0; 765 765 766 766 if (vlan->mode == MACVLAN_MODE_PASSTHRU) { ··· 768 768 return dev_set_mac_address(vlan->lowerdev, addr, NULL); 769 769 } 770 770 771 - if (macvlan_addr_busy(vlan->port, addr->sa_data)) 771 + if (macvlan_addr_busy(vlan->port, addr->__data)) 772 772 return -EADDRINUSE; 773 773 774 - return macvlan_sync_address(dev, addr->sa_data); 774 + return macvlan_sync_address(dev, addr->__data); 775 775 } 776 776 777 777 static void macvlan_change_rx_flags(struct net_device *dev, int change) ··· 1295 1295 */ 1296 1296 if (macvlan_passthru(port) && 1297 1297 !ether_addr_equal(port->dev->dev_addr, port->perm_addr)) { 1298 - struct sockaddr sa; 1298 + struct sockaddr_storage ss; 1299 1299 1300 - sa.sa_family = port->dev->type; 1301 - memcpy(&sa.sa_data, port->perm_addr, port->dev->addr_len); 1302 - dev_set_mac_address(port->dev, &sa, NULL); 1300 + ss.ss_family = port->dev->type; 1301 + memcpy(&ss.__data, port->perm_addr, port->dev->addr_len); 1302 + dev_set_mac_address(port->dev, &ss, NULL); 1303 1303 } 1304 1304 1305 1305 kfree(port);
+1 -1
drivers/net/team/team_core.c
··· 55 55 56 56 memcpy(addr.__data, dev_addr, port_dev->addr_len); 57 57 addr.ss_family = port_dev->type; 58 - return dev_set_mac_address(port_dev, (struct sockaddr *)&addr, NULL); 58 + return dev_set_mac_address(port_dev, &addr, NULL); 59 59 } 60 60 61 61 static int team_port_set_orig_dev_addr(struct team_port *port)
+1 -1
drivers/net/usb/r8152.c
··· 8432 8432 8433 8433 /* reset the MAC address in case of policy change */ 8434 8434 if (determine_ethernet_addr(tp, &ss) >= 0) 8435 - dev_set_mac_address(tp->netdev, (struct sockaddr *)&ss, NULL); 8435 + dev_set_mac_address(tp->netdev, &ss, NULL); 8436 8436 8437 8437 netdev = tp->netdev; 8438 8438 if (!netif_running(netdev))
+1 -1
include/linux/netdevice.h
··· 4214 4214 struct netlink_ext_ack *extack); 4215 4215 int netif_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss, 4216 4216 struct netlink_ext_ack *extack); 4217 - int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa, 4217 + int dev_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss, 4218 4218 struct netlink_ext_ack *extack); 4219 4219 int dev_set_mac_address_user(struct net_device *dev, struct sockaddr *sa, 4220 4220 struct netlink_ext_ack *extack);
+1
net/core/dev.c
··· 9697 9697 9698 9698 DECLARE_RWSEM(dev_addr_sem); 9699 9699 9700 + /* "sa" is a true struct sockaddr with limited "sa_data" member. */ 9700 9701 int dev_get_mac_address(struct sockaddr *sa, struct net *net, char *dev_name) 9701 9702 { 9702 9703 size_t size = sizeof(sa->sa_data_min);
+3 -3
net/core/dev_api.c
··· 319 319 /** 320 320 * dev_set_mac_address() - change Media Access Control Address 321 321 * @dev: device 322 - * @sa: new address 322 + * @ss: new address 323 323 * @extack: netlink extended ack 324 324 * 325 325 * Change the hardware (MAC) address of the device 326 326 * 327 327 * Return: 0 on success, -errno on failure. 328 328 */ 329 - int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa, 329 + int dev_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss, 330 330 struct netlink_ext_ack *extack) 331 331 { 332 332 int ret; 333 333 334 334 netdev_lock_ops(dev); 335 - ret = netif_set_mac_address(dev, (struct sockaddr_storage *)sa, extack); 335 + ret = netif_set_mac_address(dev, ss, extack); 336 336 netdev_unlock_ops(dev); 337 337 338 338 return ret;
+1 -1
net/ieee802154/nl-phy.c
··· 234 234 * dev_set_mac_address require RTNL_LOCK 235 235 */ 236 236 rtnl_lock(); 237 - rc = dev_set_mac_address(dev, (struct sockaddr *)&addr, NULL); 237 + rc = dev_set_mac_address(dev, &addr, NULL); 238 238 rtnl_unlock(); 239 239 if (rc) 240 240 goto dev_unregister;
+1 -1
net/ncsi/ncsi-manage.c
··· 1058 1058 break; 1059 1059 case ncsi_dev_state_config_apply_mac: 1060 1060 rtnl_lock(); 1061 - ret = dev_set_mac_address(dev, (struct sockaddr *)&ndp->pending_mac, NULL); 1061 + ret = dev_set_mac_address(dev, &ndp->pending_mac, NULL); 1062 1062 rtnl_unlock(); 1063 1063 if (ret < 0) 1064 1064 netdev_warn(dev, "NCSI: 'Writing MAC address to device failed\n");