aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/bonding/bond_alb.c9
-rw-r--r--drivers/net/bonding/bond_main.c15
-rw-r--r--drivers/net/hyperv/netvsc_drv.c4
-rw-r--r--drivers/net/macvlan.c4
-rw-r--r--drivers/net/tap.c2
-rw-r--r--drivers/net/team/team.c2
-rw-r--r--drivers/net/tun.c2
-rw-r--r--drivers/usb/gadget/function/u_ether.c2
-rw-r--r--include/linux/netdevice.h3
-rw-r--r--net/core/dev.c4
-rw-r--r--net/core/dev_ioctl.c2
-rw-r--r--net/core/rtnetlink.c2
-rw-r--r--net/ieee802154/nl-phy.c2
13 files changed, 29 insertions, 24 deletions
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
index e82108c917a6..9431127bbc60 100644
--- a/drivers/net/bonding/bond_alb.c
+++ b/drivers/net/bonding/bond_alb.c
@@ -1031,7 +1031,7 @@ static int alb_set_slave_mac_addr(struct slave *slave, u8 addr[],
1031 */ 1031 */
1032 memcpy(ss.__data, addr, len); 1032 memcpy(ss.__data, addr, len);
1033 ss.ss_family = dev->type; 1033 ss.ss_family = dev->type;
1034 if (dev_set_mac_address(dev, (struct sockaddr *)&ss)) { 1034 if (dev_set_mac_address(dev, (struct sockaddr *)&ss, NULL)) {
1035 netdev_err(slave->bond->dev, "dev_set_mac_address of dev %s failed! ALB mode requires that the base driver support setting the hw address also when the network device's interface is open\n", 1035 netdev_err(slave->bond->dev, "dev_set_mac_address of dev %s failed! ALB mode requires that the base driver support setting the hw address also when the network device's interface is open\n",
1036 dev->name); 1036 dev->name);
1037 return -EOPNOTSUPP; 1037 return -EOPNOTSUPP;
@@ -1250,7 +1250,7 @@ static int alb_set_mac_address(struct bonding *bond, void *addr)
1250 bond_hw_addr_copy(tmp_addr, slave->dev->dev_addr, 1250 bond_hw_addr_copy(tmp_addr, slave->dev->dev_addr,
1251 slave->dev->addr_len); 1251 slave->dev->addr_len);
1252 1252
1253 res = dev_set_mac_address(slave->dev, addr); 1253 res = dev_set_mac_address(slave->dev, addr, NULL);
1254 1254
1255 /* restore net_device's hw address */ 1255 /* restore net_device's hw address */
1256 bond_hw_addr_copy(slave->dev->dev_addr, tmp_addr, 1256 bond_hw_addr_copy(slave->dev->dev_addr, tmp_addr,
@@ -1273,7 +1273,7 @@ unwind:
1273 bond_hw_addr_copy(tmp_addr, rollback_slave->dev->dev_addr, 1273 bond_hw_addr_copy(tmp_addr, rollback_slave->dev->dev_addr,
1274 rollback_slave->dev->addr_len); 1274 rollback_slave->dev->addr_len);
1275 dev_set_mac_address(rollback_slave->dev, 1275 dev_set_mac_address(rollback_slave->dev,
1276 (struct sockaddr *)&ss); 1276 (struct sockaddr *)&ss, NULL);
1277 bond_hw_addr_copy(rollback_slave->dev->dev_addr, tmp_addr, 1277 bond_hw_addr_copy(rollback_slave->dev->dev_addr, tmp_addr,
1278 rollback_slave->dev->addr_len); 1278 rollback_slave->dev->addr_len);
1279 } 1279 }
@@ -1732,7 +1732,8 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
1732 bond->dev->addr_len); 1732 bond->dev->addr_len);
1733 ss.ss_family = bond->dev->type; 1733 ss.ss_family = bond->dev->type;
1734 /* we don't care if it can't change its mac, best effort */ 1734 /* we don't care if it can't change its mac, best effort */
1735 dev_set_mac_address(new_slave->dev, (struct sockaddr *)&ss); 1735 dev_set_mac_address(new_slave->dev, (struct sockaddr *)&ss,
1736 NULL);
1736 1737
1737 bond_hw_addr_copy(new_slave->dev->dev_addr, tmp_addr, 1738 bond_hw_addr_copy(new_slave->dev->dev_addr, tmp_addr,
1738 new_slave->dev->addr_len); 1739 new_slave->dev->addr_len);
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 6b34dbefa7dd..06039be63034 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -680,7 +680,7 @@ static void bond_do_fail_over_mac(struct bonding *bond,
680 } 680 }
681 681
682 rv = dev_set_mac_address(new_active->dev, 682 rv = dev_set_mac_address(new_active->dev,
683 (struct sockaddr *)&ss); 683 (struct sockaddr *)&ss, NULL);
684 if (rv) { 684 if (rv) {
685 netdev_err(bond->dev, "Error %d setting MAC of slave %s\n", 685 netdev_err(bond->dev, "Error %d setting MAC of slave %s\n",
686 -rv, new_active->dev->name); 686 -rv, new_active->dev->name);
@@ -695,7 +695,7 @@ static void bond_do_fail_over_mac(struct bonding *bond,
695 ss.ss_family = old_active->dev->type; 695 ss.ss_family = old_active->dev->type;
696 696
697 rv = dev_set_mac_address(old_active->dev, 697 rv = dev_set_mac_address(old_active->dev,
698 (struct sockaddr *)&ss); 698 (struct sockaddr *)&ss, NULL);
699 if (rv) 699 if (rv)
700 netdev_err(bond->dev, "Error %d setting MAC of slave %s\n", 700 netdev_err(bond->dev, "Error %d setting MAC of slave %s\n",
701 -rv, new_active->dev->name); 701 -rv, new_active->dev->name);
@@ -1527,7 +1527,8 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
1527 */ 1527 */
1528 memcpy(ss.__data, bond_dev->dev_addr, bond_dev->addr_len); 1528 memcpy(ss.__data, bond_dev->dev_addr, bond_dev->addr_len);
1529 ss.ss_family = slave_dev->type; 1529 ss.ss_family = slave_dev->type;
1530 res = dev_set_mac_address(slave_dev, (struct sockaddr *)&ss); 1530 res = dev_set_mac_address(slave_dev, (struct sockaddr *)&ss,
1531 extack);
1531 if (res) { 1532 if (res) {
1532 netdev_dbg(bond_dev, "Error %d calling set_mac_address\n", res); 1533 netdev_dbg(bond_dev, "Error %d calling set_mac_address\n", res);
1533 goto err_restore_mtu; 1534 goto err_restore_mtu;
@@ -1818,7 +1819,7 @@ err_restore_mac:
1818 bond_hw_addr_copy(ss.__data, new_slave->perm_hwaddr, 1819 bond_hw_addr_copy(ss.__data, new_slave->perm_hwaddr,
1819 new_slave->dev->addr_len); 1820 new_slave->dev->addr_len);
1820 ss.ss_family = slave_dev->type; 1821 ss.ss_family = slave_dev->type;
1821 dev_set_mac_address(slave_dev, (struct sockaddr *)&ss); 1822 dev_set_mac_address(slave_dev, (struct sockaddr *)&ss, NULL);
1822 } 1823 }
1823 1824
1824err_restore_mtu: 1825err_restore_mtu:
@@ -1999,7 +2000,7 @@ static int __bond_release_one(struct net_device *bond_dev,
1999 bond_hw_addr_copy(ss.__data, slave->perm_hwaddr, 2000 bond_hw_addr_copy(ss.__data, slave->perm_hwaddr,
2000 slave->dev->addr_len); 2001 slave->dev->addr_len);
2001 ss.ss_family = slave_dev->type; 2002 ss.ss_family = slave_dev->type;
2002 dev_set_mac_address(slave_dev, (struct sockaddr *)&ss); 2003 dev_set_mac_address(slave_dev, (struct sockaddr *)&ss, NULL);
2003 } 2004 }
2004 2005
2005 if (unregister) 2006 if (unregister)
@@ -3732,7 +3733,7 @@ static int bond_set_mac_address(struct net_device *bond_dev, void *addr)
3732 3733
3733 bond_for_each_slave(bond, slave, iter) { 3734 bond_for_each_slave(bond, slave, iter) {
3734 netdev_dbg(bond_dev, "slave %p %s\n", slave, slave->dev->name); 3735 netdev_dbg(bond_dev, "slave %p %s\n", slave, slave->dev->name);
3735 res = dev_set_mac_address(slave->dev, addr); 3736 res = dev_set_mac_address(slave->dev, addr, NULL);
3736 if (res) { 3737 if (res) {
3737 /* TODO: consider downing the slave 3738 /* TODO: consider downing the slave
3738 * and retry ? 3739 * and retry ?
@@ -3761,7 +3762,7 @@ unwind:
3761 break; 3762 break;
3762 3763
3763 tmp_res = dev_set_mac_address(rollback_slave->dev, 3764 tmp_res = dev_set_mac_address(rollback_slave->dev,
3764 (struct sockaddr *)&tmp_ss); 3765 (struct sockaddr *)&tmp_ss, NULL);
3765 if (tmp_res) { 3766 if (tmp_res) {
3766 netdev_dbg(bond_dev, "unwind err %d dev %s\n", 3767 netdev_dbg(bond_dev, "unwind err %d dev %s\n",
3767 tmp_res, rollback_slave->dev->name); 3768 tmp_res, rollback_slave->dev->name);
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 18b5584d6377..91ed15ea5883 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -1247,7 +1247,7 @@ static int netvsc_set_mac_addr(struct net_device *ndev, void *p)
1247 return -ENODEV; 1247 return -ENODEV;
1248 1248
1249 if (vf_netdev) { 1249 if (vf_netdev) {
1250 err = dev_set_mac_address(vf_netdev, addr); 1250 err = dev_set_mac_address(vf_netdev, addr, NULL);
1251 if (err) 1251 if (err)
1252 return err; 1252 return err;
1253 } 1253 }
@@ -1258,7 +1258,7 @@ static int netvsc_set_mac_addr(struct net_device *ndev, void *p)
1258 } else if (vf_netdev) { 1258 } else if (vf_netdev) {
1259 /* rollback change on VF */ 1259 /* rollback change on VF */
1260 memcpy(addr->sa_data, ndev->dev_addr, ETH_ALEN); 1260 memcpy(addr->sa_data, ndev->dev_addr, ETH_ALEN);
1261 dev_set_mac_address(vf_netdev, addr); 1261 dev_set_mac_address(vf_netdev, addr, NULL);
1262 } 1262 }
1263 1263
1264 return err; 1264 return err;
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index 0da3d36b283b..fc726ce4c164 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -744,7 +744,7 @@ static int macvlan_set_mac_address(struct net_device *dev, void *p)
744 744
745 if (vlan->mode == MACVLAN_MODE_PASSTHRU) { 745 if (vlan->mode == MACVLAN_MODE_PASSTHRU) {
746 macvlan_set_addr_change(vlan->port); 746 macvlan_set_addr_change(vlan->port);
747 return dev_set_mac_address(vlan->lowerdev, addr); 747 return dev_set_mac_address(vlan->lowerdev, addr, NULL);
748 } 748 }
749 749
750 if (macvlan_addr_busy(vlan->port, addr->sa_data)) 750 if (macvlan_addr_busy(vlan->port, addr->sa_data))
@@ -1213,7 +1213,7 @@ static void macvlan_port_destroy(struct net_device *dev)
1213 1213
1214 sa.sa_family = port->dev->type; 1214 sa.sa_family = port->dev->type;
1215 memcpy(&sa.sa_data, port->perm_addr, port->dev->addr_len); 1215 memcpy(&sa.sa_data, port->perm_addr, port->dev->addr_len);
1216 dev_set_mac_address(port->dev, &sa); 1216 dev_set_mac_address(port->dev, &sa, NULL);
1217 } 1217 }
1218 1218
1219 kfree(port); 1219 kfree(port);
diff --git a/drivers/net/tap.c b/drivers/net/tap.c
index f03004f37eca..443b2694130c 100644
--- a/drivers/net/tap.c
+++ b/drivers/net/tap.c
@@ -1113,7 +1113,7 @@ static long tap_ioctl(struct file *file, unsigned int cmd,
1113 rtnl_unlock(); 1113 rtnl_unlock();
1114 return -ENOLINK; 1114 return -ENOLINK;
1115 } 1115 }
1116 ret = dev_set_mac_address(tap->dev, &sa); 1116 ret = dev_set_mac_address(tap->dev, &sa, NULL);
1117 tap_put_tap_dev(tap); 1117 tap_put_tap_dev(tap);
1118 rtnl_unlock(); 1118 rtnl_unlock();
1119 return ret; 1119 return ret;
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 93576e0240dd..afd9d25d1992 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -59,7 +59,7 @@ static int __set_port_dev_addr(struct net_device *port_dev,
59 59
60 memcpy(addr.__data, dev_addr, port_dev->addr_len); 60 memcpy(addr.__data, dev_addr, port_dev->addr_len);
61 addr.ss_family = port_dev->type; 61 addr.ss_family = port_dev->type;
62 return dev_set_mac_address(port_dev, (struct sockaddr *)&addr); 62 return dev_set_mac_address(port_dev, (struct sockaddr *)&addr, NULL);
63} 63}
64 64
65static int team_port_set_orig_dev_addr(struct team_port *port) 65static int team_port_set_orig_dev_addr(struct team_port *port)
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index ea528248d7d0..72577aa35b06 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -3202,7 +3202,7 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
3202 tun_debug(KERN_DEBUG, tun, "set hw address: %pM\n", 3202 tun_debug(KERN_DEBUG, tun, "set hw address: %pM\n",
3203 ifr.ifr_hwaddr.sa_data); 3203 ifr.ifr_hwaddr.sa_data);
3204 3204
3205 ret = dev_set_mac_address(tun->dev, &ifr.ifr_hwaddr); 3205 ret = dev_set_mac_address(tun->dev, &ifr.ifr_hwaddr, NULL);
3206 break; 3206 break;
3207 3207
3208 case TUNGETSNDBUF: 3208 case TUNGETSNDBUF:
diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c
index 0f026d445e31..737bd77a575d 100644
--- a/drivers/usb/gadget/function/u_ether.c
+++ b/drivers/usb/gadget/function/u_ether.c
@@ -879,7 +879,7 @@ int gether_register_netdev(struct net_device *net)
879 sa.sa_family = net->type; 879 sa.sa_family = net->type;
880 memcpy(sa.sa_data, dev->dev_mac, ETH_ALEN); 880 memcpy(sa.sa_data, dev->dev_mac, ETH_ALEN);
881 rtnl_lock(); 881 rtnl_lock();
882 status = dev_set_mac_address(net, &sa); 882 status = dev_set_mac_address(net, &sa, NULL);
883 rtnl_unlock(); 883 rtnl_unlock();
884 if (status) 884 if (status)
885 pr_warn("cannot set self ethernet address: %d\n", status); 885 pr_warn("cannot set self ethernet address: %d\n", status);
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 36ca5f50f822..d89875ec21ac 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -3628,7 +3628,8 @@ int dev_set_mtu_ext(struct net_device *dev, int mtu,
3628int dev_set_mtu(struct net_device *, int); 3628int dev_set_mtu(struct net_device *, int);
3629int dev_change_tx_queue_len(struct net_device *, unsigned long); 3629int dev_change_tx_queue_len(struct net_device *, unsigned long);
3630void dev_set_group(struct net_device *, int); 3630void dev_set_group(struct net_device *, int);
3631int dev_set_mac_address(struct net_device *, struct sockaddr *); 3631int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa,
3632 struct netlink_ext_ack *extack);
3632int dev_change_carrier(struct net_device *, bool new_carrier); 3633int dev_change_carrier(struct net_device *, bool new_carrier);
3633int dev_get_phys_port_id(struct net_device *dev, 3634int dev_get_phys_port_id(struct net_device *dev,
3634 struct netdev_phys_item_id *ppid); 3635 struct netdev_phys_item_id *ppid);
diff --git a/net/core/dev.c b/net/core/dev.c
index 754284873355..7250a3a73fa4 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -7759,10 +7759,12 @@ EXPORT_SYMBOL(dev_set_group);
7759 * dev_set_mac_address - Change Media Access Control Address 7759 * dev_set_mac_address - Change Media Access Control Address
7760 * @dev: device 7760 * @dev: device
7761 * @sa: new address 7761 * @sa: new address
7762 * @extack: netlink extended ack
7762 * 7763 *
7763 * Change the hardware (MAC) address of the device 7764 * Change the hardware (MAC) address of the device
7764 */ 7765 */
7765int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa) 7766int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa,
7767 struct netlink_ext_ack *extack)
7766{ 7768{
7767 const struct net_device_ops *ops = dev->netdev_ops; 7769 const struct net_device_ops *ops = dev->netdev_ops;
7768 int err; 7770 int err;
diff --git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c
index da273ec3cc57..31380fd5a4e2 100644
--- a/net/core/dev_ioctl.c
+++ b/net/core/dev_ioctl.c
@@ -246,7 +246,7 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, unsigned int cmd)
246 case SIOCSIFHWADDR: 246 case SIOCSIFHWADDR:
247 if (dev->addr_len > sizeof(struct sockaddr)) 247 if (dev->addr_len > sizeof(struct sockaddr))
248 return -EINVAL; 248 return -EINVAL;
249 return dev_set_mac_address(dev, &ifr->ifr_hwaddr); 249 return dev_set_mac_address(dev, &ifr->ifr_hwaddr, NULL);
250 250
251 case SIOCSIFHWBROADCAST: 251 case SIOCSIFHWBROADCAST:
252 if (ifr->ifr_hwaddr.sa_family != dev->type) 252 if (ifr->ifr_hwaddr.sa_family != dev->type)
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 3b6e551f9e69..f8bdb8adab2c 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -2444,7 +2444,7 @@ static int do_setlink(const struct sk_buff *skb,
2444 sa->sa_family = dev->type; 2444 sa->sa_family = dev->type;
2445 memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]), 2445 memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]),
2446 dev->addr_len); 2446 dev->addr_len);
2447 err = dev_set_mac_address(dev, sa); 2447 err = dev_set_mac_address(dev, sa, extack);
2448 kfree(sa); 2448 kfree(sa);
2449 if (err) 2449 if (err)
2450 goto errout; 2450 goto errout;
diff --git a/net/ieee802154/nl-phy.c b/net/ieee802154/nl-phy.c
index b231e40f006a..0c25c0bcc4da 100644
--- a/net/ieee802154/nl-phy.c
+++ b/net/ieee802154/nl-phy.c
@@ -242,7 +242,7 @@ int ieee802154_add_iface(struct sk_buff *skb, struct genl_info *info)
242 * dev_set_mac_address require RTNL_LOCK 242 * dev_set_mac_address require RTNL_LOCK
243 */ 243 */
244 rtnl_lock(); 244 rtnl_lock();
245 rc = dev_set_mac_address(dev, &addr); 245 rc = dev_set_mac_address(dev, &addr, NULL);
246 rtnl_unlock(); 246 rtnl_unlock();
247 if (rc) 247 if (rc)
248 goto dev_unregister; 248 goto dev_unregister;