lkml.org 
[lkml]   [2017]   [Nov]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.9 13/54] be2net: fix accesses to unicast list
    Date
    From: Ivan Vecera <cera@cera.cz>

    [ Upstream commit 1d0f110a2c6c4bca3dbcc4b0e27f1e3dc2d44a2c ]

    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>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    ---
    drivers/net/ethernet/emulex/benet/be_main.c | 9 +++------
    1 file 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 5626908f3f7a..c82f22b244c1 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)

    /* Check if mac has already been added as part of uc-list */
    for (i = 0; i < adapter->uc_macs; i++) {
    - if (ether_addr_equal((u8 *)&adapter->uc_list[i * ETH_ALEN],
    - mac)) {
    + if (ether_addr_equal(adapter->uc_list[i].mac, mac)) {
    /* mac already added, skip addition */
    adapter->pmac_id[0] = adapter->pmac_id[i + 1];
    return 0;
    @@ -1679,14 +1678,12 @@ static void be_clear_mc_list(struct be_adapter *adapter)

    static int be_uc_mac_add(struct be_adapter *adapter, int uc_idx)
    {
    - if (ether_addr_equal((u8 *)&adapter->uc_list[uc_idx * ETH_ALEN],
    - adapter->dev_mac)) {
    + if (ether_addr_equal(adapter->uc_list[uc_idx].mac, adapter->dev_mac)) {
    adapter->pmac_id[uc_idx + 1] = adapter->pmac_id[0];
    return 0;
    }

    - return be_cmd_pmac_add(adapter,
    - (u8 *)&adapter->uc_list[uc_idx * ETH_ALEN],
    + return be_cmd_pmac_add(adapter, adapter->uc_list[uc_idx].mac,
    adapter->if_handle,
    &adapter->pmac_id[uc_idx + 1], 0);
    }
    --
    2.11.0
    \
     
     \ /
      Last update: 2017-11-23 00:18    [W:3.768 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site