mac802154: use dev_addr_set() - manual
authorJakub Kicinski <kuba@kernel.org>
Tue, 19 Oct 2021 16:36:06 +0000 (09:36 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 20 Oct 2021 13:27:40 +0000 (14:27 +0100)
Commit 406f42fa0d3c ("net-next: When a bond have a massive amount
of VLANs...") introduced a rbtree for faster Ethernet address look
up. To maintain netdev->dev_addr in this tree we need to make all
the writes to it got through appropriate helpers.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ieee802154/6lowpan/core.c
net/mac802154/iface.c

index 3297e7fa99458b13c40609588f187d366cf37411..2cf62718a282a01a9cb9a6788e72a6aca98aa266 100644 (file)
@@ -157,7 +157,7 @@ static int lowpan_newlink(struct net *src_net, struct net_device *ldev,
 
        lowpan_802154_dev(ldev)->wdev = wdev;
        /* Set the lowpan hardware address to the wpan hardware address. */
-       memcpy(ldev->dev_addr, wdev->dev_addr, IEEE802154_ADDR_LEN);
+       __dev_addr_set(ldev, wdev->dev_addr, IEEE802154_ADDR_LEN);
        /* We need headroom for possible wpan_dev_hard_header call and tailroom
         * for encryption/fcs handling. The lowpan interface will replace
         * the IPv6 header with 6LoWPAN header. At worst case the 6LoWPAN
index 3210dec64a6ae507dab29eeff34311c705b2221c..500ed1b8125037dd1bd01dc8be44718b6fe49435 100644 (file)
@@ -136,8 +136,7 @@ static int mac802154_wpan_mac_addr(struct net_device *dev, void *p)
         * wpan mac has been changed
         */
        if (sdata->wpan_dev.lowpan_dev)
-               memcpy(sdata->wpan_dev.lowpan_dev->dev_addr, dev->dev_addr,
-                      dev->addr_len);
+               dev_addr_set(sdata->wpan_dev.lowpan_dev, dev->dev_addr);
 
        return mac802154_wpan_update_llsec(dev);
 }
@@ -615,6 +614,7 @@ ieee802154_if_add(struct ieee802154_local *local, const char *name,
                  unsigned char name_assign_type, enum nl802154_iftype type,
                  __le64 extended_addr)
 {
+       u8 addr[IEEE802154_EXTENDED_ADDR_LEN];
        struct net_device *ndev = NULL;
        struct ieee802154_sub_if_data *sdata = NULL;
        int ret;
@@ -638,11 +638,12 @@ ieee802154_if_add(struct ieee802154_local *local, const char *name,
        switch (type) {
        case NL802154_IFTYPE_NODE:
                ndev->type = ARPHRD_IEEE802154;
-               if (ieee802154_is_valid_extended_unicast_addr(extended_addr))
-                       ieee802154_le64_to_be64(ndev->dev_addr, &extended_addr);
-               else
-                       memcpy(ndev->dev_addr, ndev->perm_addr,
-                              IEEE802154_EXTENDED_ADDR_LEN);
+               if (ieee802154_is_valid_extended_unicast_addr(extended_addr)) {
+                       ieee802154_le64_to_be64(addr, &extended_addr);
+                       dev_addr_set(ndev, addr);
+               } else {
+                       dev_addr_set(ndev, ndev->perm_addr);
+               }
                break;
        case NL802154_IFTYPE_MONITOR:
                ndev->type = ARPHRD_IEEE802154_MONITOR;