OSDN Git Service

wilc1000: copy address before calling wilc_set_mac_address
authorJakub Kicinski <kuba@kernel.org>
Thu, 18 Nov 2021 14:27:19 +0000 (06:27 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 19 Nov 2021 10:46:04 +0000 (10:46 +0000)
wilc_set_mac_address() calls IO routines which don't guarantee
the pointer won't be written to. Make a copy.

Acked-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/wireless/microchip/wilc1000/netdev.c

index 690572e..4712cd7 100644 (file)
@@ -574,6 +574,7 @@ static int wilc_mac_open(struct net_device *ndev)
        struct wilc *wl = vif->wilc;
        int ret = 0;
        struct mgmt_frame_regs mgmt_regs = {};
+       u8 addr[ETH_ALEN] __aligned(2);
 
        if (!wl || !wl->dev) {
                netdev_err(ndev, "device not ready\n");
@@ -596,10 +597,9 @@ static int wilc_mac_open(struct net_device *ndev)
                                vif->idx);
 
        if (is_valid_ether_addr(ndev->dev_addr)) {
-               wilc_set_mac_address(vif, ndev->dev_addr);
+               ether_addr_copy(addr, ndev->dev_addr);
+               wilc_set_mac_address(vif, addr);
        } else {
-               u8 addr[ETH_ALEN];
-
                wilc_get_mac_address(vif, addr);
                eth_hw_addr_set(ndev, addr);
        }