diff options
author | Ivan Vecera <cera@cera.cz> | 2017-01-06 14:30:02 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-01-06 22:22:08 -0500 |
commit | 1d0f110a2c6c4bca3dbcc4b0e27f1e3dc2d44a2c (patch) | |
tree | df29493c336b047e7da28574570d9f81e52fdedb /drivers/net/ethernet/emulex/benet/be_main.c | |
parent | bcd5e1a49f0d54afd3c5411bed2f59996e1c53e4 (diff) |
be2net: fix accesses to unicast list
Commit 988d44b "be2net: Avoid redundant addition of mac address in HW"
introduced be_dev_mac_add & be_uc_mac_add helpers that incorrectly
access adapter->uc_list as an array of bytes instead of an array of
be_eth_addr. Consequently NIC is not filled with valid data so unicast
filtering is broken.
Cc: Sathya Perla <sathya.perla@broadcom.com>
Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
Cc: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
Cc: Somnath Kotur <somnath.kotur@broadcom.com>
Fixes: 988d44b be2net: Avoid redundant addition of mac address in HW
Signed-off-by: Ivan Vecera <cera@cera.cz>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/emulex/benet/be_main.c')
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be_main.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index 225e9a4877d7..3510352866c2 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c | |||
@@ -275,8 +275,7 @@ static int be_dev_mac_add(struct be_adapter *adapter, u8 *mac) | |||
275 | 275 | ||
276 | /* Check if mac has already been added as part of uc-list */ | 276 | /* Check if mac has already been added as part of uc-list */ |
277 | for (i = 0; i < adapter->uc_macs; i++) { | 277 | for (i = 0; i < adapter->uc_macs; i++) { |
278 | if (ether_addr_equal((u8 *)&adapter->uc_list[i * ETH_ALEN], | 278 | if (ether_addr_equal(adapter->uc_list[i].mac, mac)) { |
279 | mac)) { | ||
280 | /* mac already added, skip addition */ | 279 | /* mac already added, skip addition */ |
281 | adapter->pmac_id[0] = adapter->pmac_id[i + 1]; | 280 | adapter->pmac_id[0] = adapter->pmac_id[i + 1]; |
282 | return 0; | 281 | return 0; |
@@ -1655,14 +1654,12 @@ static void be_clear_mc_list(struct be_adapter *adapter) | |||
1655 | 1654 | ||
1656 | static int be_uc_mac_add(struct be_adapter *adapter, int uc_idx) | 1655 | static int be_uc_mac_add(struct be_adapter *adapter, int uc_idx) |
1657 | { | 1656 | { |
1658 | if (ether_addr_equal((u8 *)&adapter->uc_list[uc_idx * ETH_ALEN], | 1657 | if (ether_addr_equal(adapter->uc_list[uc_idx].mac, adapter->dev_mac)) { |
1659 | adapter->dev_mac)) { | ||
1660 | adapter->pmac_id[uc_idx + 1] = adapter->pmac_id[0]; | 1658 | adapter->pmac_id[uc_idx + 1] = adapter->pmac_id[0]; |
1661 | return 0; | 1659 | return 0; |
1662 | } | 1660 | } |
1663 | 1661 | ||
1664 | return be_cmd_pmac_add(adapter, | 1662 | return be_cmd_pmac_add(adapter, adapter->uc_list[uc_idx].mac, |
1665 | (u8 *)&adapter->uc_list[uc_idx * ETH_ALEN], | ||
1666 | adapter->if_handle, | 1663 | adapter->if_handle, |
1667 | &adapter->pmac_id[uc_idx + 1], 0); | 1664 | &adapter->pmac_id[uc_idx + 1], 0); |
1668 | } | 1665 | } |