diff options
author | Eric Dumazet <edumazet@google.com> | 2019-11-06 01:11:51 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-11-07 03:14:48 +0300 |
commit | 25c7a6d1f90e208ec27ca854b1381ed39842ec57 (patch) | |
tree | a645c406ef309589a1c6f851ca1ba761575a00b4 /include/net/arp.h | |
parent | 3828a93f5cfdf5d8a4ff9dead741e9a2871ff57b (diff) | |
download | linux-25c7a6d1f90e208ec27ca854b1381ed39842ec57.tar.xz |
net: avoid potential false sharing in neighbor related code
There are common instances of the following construct :
if (n->confirmed != now)
n->confirmed = now;
A C compiler could legally remove the conditional.
Use READ_ONCE()/WRITE_ONCE() to avoid this problem.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/arp.h')
-rw-r--r-- | include/net/arp.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/include/net/arp.h b/include/net/arp.h index c8f580a0e6b1..4950191f6b2b 100644 --- a/include/net/arp.h +++ b/include/net/arp.h @@ -57,8 +57,8 @@ static inline void __ipv4_confirm_neigh(struct net_device *dev, u32 key) unsigned long now = jiffies; /* avoid dirtying neighbour */ - if (n->confirmed != now) - n->confirmed = now; + if (READ_ONCE(n->confirmed) != now) + WRITE_ONCE(n->confirmed, now); } rcu_read_unlock_bh(); } |