ixgbevf: fix error code path when setting MAC address
Return error when a MAC address change is rejected by the PF. This will prevent the user from modifying the MAC address when that operation is not permitted. Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
324d086709
commit
32ca686835
@ -3692,19 +3692,23 @@ static int ixgbevf_set_mac(struct net_device *netdev, void *p)
|
||||
struct ixgbevf_adapter *adapter = netdev_priv(netdev);
|
||||
struct ixgbe_hw *hw = &adapter->hw;
|
||||
struct sockaddr *addr = p;
|
||||
int err;
|
||||
|
||||
if (!is_valid_ether_addr(addr->sa_data))
|
||||
return -EADDRNOTAVAIL;
|
||||
|
||||
ether_addr_copy(netdev->dev_addr, addr->sa_data);
|
||||
ether_addr_copy(hw->mac.addr, addr->sa_data);
|
||||
|
||||
spin_lock_bh(&adapter->mbx_lock);
|
||||
|
||||
hw->mac.ops.set_rar(hw, 0, hw->mac.addr, 0);
|
||||
err = hw->mac.ops.set_rar(hw, 0, addr->sa_data, 0);
|
||||
|
||||
spin_unlock_bh(&adapter->mbx_lock);
|
||||
|
||||
if (err)
|
||||
return -EPERM;
|
||||
|
||||
ether_addr_copy(hw->mac.addr, addr->sa_data);
|
||||
ether_addr_copy(netdev->dev_addr, addr->sa_data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -408,8 +408,10 @@ static s32 ixgbevf_set_rar_vf(struct ixgbe_hw *hw, u32 index, u8 *addr,
|
||||
|
||||
/* if nacked the address was rejected, use "perm_addr" */
|
||||
if (!ret_val &&
|
||||
(msgbuf[0] == (IXGBE_VF_SET_MAC_ADDR | IXGBE_VT_MSGTYPE_NACK)))
|
||||
(msgbuf[0] == (IXGBE_VF_SET_MAC_ADDR | IXGBE_VT_MSGTYPE_NACK))) {
|
||||
ixgbevf_get_mac_addr_vf(hw, hw->mac.addr);
|
||||
return IXGBE_ERR_MBX;
|
||||
}
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user