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 ixgbevf_adapter *adapter = netdev_priv(netdev);
|
||||||
struct ixgbe_hw *hw = &adapter->hw;
|
struct ixgbe_hw *hw = &adapter->hw;
|
||||||
struct sockaddr *addr = p;
|
struct sockaddr *addr = p;
|
||||||
|
int err;
|
||||||
|
|
||||||
if (!is_valid_ether_addr(addr->sa_data))
|
if (!is_valid_ether_addr(addr->sa_data))
|
||||||
return -EADDRNOTAVAIL;
|
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);
|
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);
|
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;
|
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 nacked the address was rejected, use "perm_addr" */
|
||||||
if (!ret_val &&
|
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);
|
ixgbevf_get_mac_addr_vf(hw, hw->mac.addr);
|
||||||
|
return IXGBE_ERR_MBX;
|
||||||
|
}
|
||||||
|
|
||||||
return ret_val;
|
return ret_val;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user