diff options
| author | Shani Michaelli <shanim@mellanox.com> | 2014-05-14 12:15:15 +0300 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-05-14 15:40:33 -0400 |
| commit | fe1ff29dd4989f6371e8d78bc340f596f4a78e04 (patch) | |
| tree | 19a379498dbb834136394ff20b57958e04f24ef6 /net/unix/af_unix.c | |
| parent | net/mlx4_core: Removed unnecessary bit operation condition (diff) | |
| download | linux-fe1ff29dd4989f6371e8d78bc340f596f4a78e04.tar.gz linux-fe1ff29dd4989f6371e8d78bc340f596f4a78e04.zip | |
net/mlx4_en: Protect MAC address modification with the state_lock mutex
This Patches solves an issue that could raise when modifying the
device's MAC. It occurs due to a simultaneous access to priv->mac_hash
from two contexts. The buggy scenario described below:
Context 1: copy the new mac address to the dev->dev_addr field.
Context 2: mlx4_en_do_uc_filter removes prev_mac entry from the mac_hash
db since it is not in dev->uc and not equal to dev->dev_addr.
Context 1: mlx4_en_do_set_mac() calls mlx4_en_replace_mac() to replace
prev_mac with dev_addr but it fails to update the mac_hash db
since it no longer contains prev_mac, therefore it returns
with an error.
The fix is to prevent mlx4_en_do_uc_filter from being executed by both
of the context 1 calls described above, This is done by putting them
both under the mdev->state_lock lock, it will solve this issue since
mlx4_en_do_uc_filter is already protected by the mdev->state_lock.
Reviewed-by: Eyal Perry <eyalpe@mellanox.com>
Signed-off-by: Shani Michaeli <shanim@mellanox.com>
Signed-off-by: Amir Vadai <amirv@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/unix/af_unix.c')
0 files changed, 0 insertions, 0 deletions
