Skip to content

Commit 9ca6804

Browse files
keesPaolo Abeni
authored andcommitted
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 <[email protected]> Signed-off-by: Kees Cook <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
1 parent 79deac8 commit 9ca6804

File tree

11 files changed

+30
-34
lines changed

11 files changed

+30
-34
lines changed

drivers/net/bonding/bond_alb.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,7 +1035,7 @@ static int alb_set_slave_mac_addr(struct slave *slave, const u8 addr[],
10351035
*/
10361036
memcpy(ss.__data, addr, len);
10371037
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)) {
10391039
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");
10401040
return -EOPNOTSUPP;
10411041
}
@@ -1273,8 +1273,7 @@ static int alb_set_mac_address(struct bonding *bond, void *addr)
12731273
break;
12741274
bond_hw_addr_copy(tmp_addr, rollback_slave->dev->dev_addr,
12751275
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);
12781277
dev_addr_set(rollback_slave->dev, tmp_addr);
12791278
}
12801279

@@ -1763,8 +1762,7 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
17631762
bond->dev->addr_len);
17641763
ss.ss_family = bond->dev->type;
17651764
/* we don't care if it can't change its mac, best effort */
1766-
dev_set_mac_address(new_slave->dev, (struct sockaddr *)&ss,
1767-
NULL);
1765+
dev_set_mac_address(new_slave->dev, &ss, NULL);
17681766

17691767
dev_addr_set(new_slave->dev, tmp_addr);
17701768
}

drivers/net/bonding/bond_main.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1112,8 +1112,7 @@ static void bond_do_fail_over_mac(struct bonding *bond,
11121112
ss.ss_family = bond->dev->type;
11131113
}
11141114

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);
11171116
if (rv) {
11181117
slave_err(bond->dev, new_active->dev, "Error %d setting MAC of new active slave\n",
11191118
-rv);
@@ -1127,8 +1126,7 @@ static void bond_do_fail_over_mac(struct bonding *bond,
11271126
new_active->dev->addr_len);
11281127
ss.ss_family = old_active->dev->type;
11291128

1130-
rv = dev_set_mac_address(old_active->dev,
1131-
(struct sockaddr *)&ss, NULL);
1129+
rv = dev_set_mac_address(old_active->dev, &ss, NULL);
11321130
if (rv)
11331131
slave_err(bond->dev, old_active->dev, "Error %d setting MAC of old active slave\n",
11341132
-rv);
@@ -2127,7 +2125,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
21272125
}
21282126

21292127
ss.ss_family = slave_dev->type;
2130-
res = dev_set_mac_address(slave_dev, (struct sockaddr *)&ss, extack);
2128+
res = dev_set_mac_address(slave_dev, &ss, extack);
21312129
if (res) {
21322130
slave_err(bond_dev, slave_dev, "Error %d calling set_mac_address\n", res);
21332131
goto err_restore_mtu;
@@ -2455,7 +2453,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
24552453
bond_hw_addr_copy(ss.__data, new_slave->perm_hwaddr,
24562454
new_slave->dev->addr_len);
24572455
ss.ss_family = slave_dev->type;
2458-
dev_set_mac_address(slave_dev, (struct sockaddr *)&ss, NULL);
2456+
dev_set_mac_address(slave_dev, &ss, NULL);
24592457
}
24602458

24612459
err_restore_mtu:
@@ -2649,7 +2647,7 @@ static int __bond_release_one(struct net_device *bond_dev,
26492647
bond_hw_addr_copy(ss.__data, slave->perm_hwaddr,
26502648
slave->dev->addr_len);
26512649
ss.ss_family = slave_dev->type;
2652-
dev_set_mac_address(slave_dev, (struct sockaddr *)&ss, NULL);
2650+
dev_set_mac_address(slave_dev, &ss, NULL);
26532651
}
26542652

26552653
if (unregister) {
@@ -4936,8 +4934,7 @@ static int bond_set_mac_address(struct net_device *bond_dev, void *addr)
49364934
if (rollback_slave == slave)
49374935
break;
49384936

4939-
tmp_res = dev_set_mac_address(rollback_slave->dev,
4940-
(struct sockaddr *)&tmp_ss, NULL);
4937+
tmp_res = dev_set_mac_address(rollback_slave->dev, &tmp_ss, NULL);
49414938
if (tmp_res) {
49424939
slave_dbg(bond_dev, rollback_slave->dev, "%s: unwind err %d\n",
49434940
__func__, tmp_res);

drivers/net/hyperv/netvsc_drv.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,7 +1371,7 @@ static int netvsc_set_mac_addr(struct net_device *ndev, void *p)
13711371
struct net_device_context *ndc = netdev_priv(ndev);
13721372
struct net_device *vf_netdev = rtnl_dereference(ndc->vf_netdev);
13731373
struct netvsc_device *nvdev = rtnl_dereference(ndc->nvdev);
1374-
struct sockaddr *addr = p;
1374+
struct sockaddr_storage *addr = p;
13751375
int err;
13761376

13771377
err = eth_prepare_mac_addr_change(ndev, p);
@@ -1387,12 +1387,12 @@ static int netvsc_set_mac_addr(struct net_device *ndev, void *p)
13871387
return err;
13881388
}
13891389

1390-
err = rndis_filter_set_device_mac(nvdev, addr->sa_data);
1390+
err = rndis_filter_set_device_mac(nvdev, addr->__data);
13911391
if (!err) {
13921392
eth_commit_mac_addr_change(ndev, p);
13931393
} else if (vf_netdev) {
13941394
/* rollback change on VF */
1395-
memcpy(addr->sa_data, ndev->dev_addr, ETH_ALEN);
1395+
memcpy(addr->__data, ndev->dev_addr, ETH_ALEN);
13961396
dev_set_mac_address(vf_netdev, addr, NULL);
13971397
}
13981398

drivers/net/macvlan.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -754,24 +754,24 @@ static int macvlan_sync_address(struct net_device *dev,
754754
static int macvlan_set_mac_address(struct net_device *dev, void *p)
755755
{
756756
struct macvlan_dev *vlan = netdev_priv(dev);
757-
struct sockaddr *addr = p;
757+
struct sockaddr_storage *addr = p;
758758

759-
if (!is_valid_ether_addr(addr->sa_data))
759+
if (!is_valid_ether_addr(addr->__data))
760760
return -EADDRNOTAVAIL;
761761

762762
/* 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))
764764
return 0;
765765

766766
if (vlan->mode == MACVLAN_MODE_PASSTHRU) {
767767
macvlan_set_addr_change(vlan->port);
768768
return dev_set_mac_address(vlan->lowerdev, addr, NULL);
769769
}
770770

771-
if (macvlan_addr_busy(vlan->port, addr->sa_data))
771+
if (macvlan_addr_busy(vlan->port, addr->__data))
772772
return -EADDRINUSE;
773773

774-
return macvlan_sync_address(dev, addr->sa_data);
774+
return macvlan_sync_address(dev, addr->__data);
775775
}
776776

777777
static void macvlan_change_rx_flags(struct net_device *dev, int change)
@@ -1295,11 +1295,11 @@ static void macvlan_port_destroy(struct net_device *dev)
12951295
*/
12961296
if (macvlan_passthru(port) &&
12971297
!ether_addr_equal(port->dev->dev_addr, port->perm_addr)) {
1298-
struct sockaddr sa;
1298+
struct sockaddr_storage ss;
12991299

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);
13031303
}
13041304

13051305
kfree(port);

drivers/net/team/team_core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ static int __set_port_dev_addr(struct net_device *port_dev,
5555

5656
memcpy(addr.__data, dev_addr, port_dev->addr_len);
5757
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);
5959
}
6060

6161
static int team_port_set_orig_dev_addr(struct team_port *port)

drivers/net/usb/r8152.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8432,7 +8432,7 @@ static int rtl8152_post_reset(struct usb_interface *intf)
84328432

84338433
/* reset the MAC address in case of policy change */
84348434
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);
84368436

84378437
netdev = tp->netdev;
84388438
if (!netif_running(netdev))

include/linux/netdevice.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4214,7 +4214,7 @@ int dev_pre_changeaddr_notify(struct net_device *dev, const char *addr,
42144214
struct netlink_ext_ack *extack);
42154215
int netif_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
42164216
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,
42184218
struct netlink_ext_ack *extack);
42194219
int dev_set_mac_address_user(struct net_device *dev, struct sockaddr *sa,
42204220
struct netlink_ext_ack *extack);

net/core/dev.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9697,6 +9697,7 @@ int netif_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
96979697

96989698
DECLARE_RWSEM(dev_addr_sem);
96999699

9700+
/* "sa" is a true struct sockaddr with limited "sa_data" member. */
97009701
int dev_get_mac_address(struct sockaddr *sa, struct net *net, char *dev_name)
97019702
{
97029703
size_t size = sizeof(sa->sa_data_min);

net/core/dev_api.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -319,20 +319,20 @@ EXPORT_SYMBOL(dev_set_allmulti);
319319
/**
320320
* dev_set_mac_address() - change Media Access Control Address
321321
* @dev: device
322-
* @sa: new address
322+
* @ss: new address
323323
* @extack: netlink extended ack
324324
*
325325
* Change the hardware (MAC) address of the device
326326
*
327327
* Return: 0 on success, -errno on failure.
328328
*/
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,
330330
struct netlink_ext_ack *extack)
331331
{
332332
int ret;
333333

334334
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);
336336
netdev_unlock_ops(dev);
337337

338338
return ret;

net/ieee802154/nl-phy.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ int ieee802154_add_iface(struct sk_buff *skb, struct genl_info *info)
234234
* dev_set_mac_address require RTNL_LOCK
235235
*/
236236
rtnl_lock();
237-
rc = dev_set_mac_address(dev, (struct sockaddr *)&addr, NULL);
237+
rc = dev_set_mac_address(dev, &addr, NULL);
238238
rtnl_unlock();
239239
if (rc)
240240
goto dev_unregister;

0 commit comments

Comments
 (0)