summaryrefslogtreecommitdiffstats
path: root/include/net/arp.h
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2019-11-05 14:11:51 -0800
committerDavid S. Miller <davem@davemloft.net>2019-11-06 16:14:48 -0800
commit25c7a6d1f90e208ec27ca854b1381ed39842ec57 (patch)
treea645c406ef309589a1c6f851ca1ba761575a00b4 /include/net/arp.h
parent3828a93f5cfdf5d8a4ff9dead741e9a2871ff57b (diff)
downloadlinux-25c7a6d1f90e208ec27ca854b1381ed39842ec57.tar.bz2
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.h4
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();
}