]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
net-next/hinic:fix a bug in set mac address
authorXue Chaojing <xuechaojing@huawei.com>
Mon, 18 Mar 2019 08:29:47 +0000 (16:29 +0800)
committerStefan Bader <stefan.bader@canonical.com>
Mon, 1 Apr 2019 12:37:29 +0000 (14:37 +0200)
BugLink: https://bugs.launchpad.net/bugs/1820187
In add_mac_addr(), if the MAC address is a muliticast address,
it will not be set, which causes the network card fail to receive
the multicast packet. This patch fixes this bug.

Signed-off-by: Xue Chaojing <xuechaojing@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 9ea72dc9430306b77c73a8a21beb51437cde1d6d)
Signed-off-by: Ike Panhc <ike.pan@canonical.com>
Acked-by: Kleber Souza <kleber.souza@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/net/ethernet/huawei/hinic/hinic_main.c

index c675077f9774445a8411d080a423f2a4a39ababb..6d48dc62a44b5d1d560a2eeab0173bf2bd7f5543 100644 (file)
@@ -600,9 +600,6 @@ static int add_mac_addr(struct net_device *netdev, const u8 *addr)
        u16 vid = 0;
        int err;
 
-       if (!is_valid_ether_addr(addr))
-               return -EADDRNOTAVAIL;
-
        netif_info(nic_dev, drv, netdev, "set mac addr = %02x %02x %02x %02x %02x %02x\n",
                   addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
 
@@ -726,6 +723,7 @@ static void set_rx_mode(struct work_struct *work)
 {
        struct hinic_rx_mode_work *rx_mode_work = work_to_rx_mode_work(work);
        struct hinic_dev *nic_dev = rx_mode_work_to_nic_dev(rx_mode_work);
+       struct netdev_hw_addr *ha;
 
        netif_info(nic_dev, drv, nic_dev->netdev, "set rx mode work\n");
 
@@ -733,6 +731,9 @@ static void set_rx_mode(struct work_struct *work)
 
        __dev_uc_sync(nic_dev->netdev, add_mac_addr, remove_mac_addr);
        __dev_mc_sync(nic_dev->netdev, add_mac_addr, remove_mac_addr);
+
+       netdev_for_each_mc_addr(ha, nic_dev->netdev)
+               add_mac_addr(nic_dev->netdev, ha->addr);
 }
 
 static void hinic_set_rx_mode(struct net_device *netdev)