]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: Fix data-races around sysctl_fb_tunnels_only_for_init_net.
authorKuniyuki Iwashima <kuniyu@amazon.com>
Tue, 23 Aug 2022 17:46:56 +0000 (10:46 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 31 Aug 2022 15:18:09 +0000 (17:18 +0200)
[ Upstream commit af67508ea6cbf0e4ea27f8120056fa2efce127dd ]

While reading sysctl_fb_tunnels_only_for_init_net, it can be changed
concurrently.  Thus, we need to add READ_ONCE() to its readers.

Fixes: 79134e6ce2c9 ("net: do not create fallback tunnels for non-default namespaces")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
include/linux/netdevice.h

index 2563d30736e9a21d53a1b73de820cf87ef1f4501..78dd63a5c7c80d8aa5e5009341b9cf68cfd62a3b 100644 (file)
@@ -640,9 +640,14 @@ extern int sysctl_devconf_inherit_init_net;
  */
 static inline bool net_has_fallback_tunnels(const struct net *net)
 {
-       return !IS_ENABLED(CONFIG_SYSCTL) ||
-              !sysctl_fb_tunnels_only_for_init_net ||
-              (net == &init_net && sysctl_fb_tunnels_only_for_init_net == 1);
+#if IS_ENABLED(CONFIG_SYSCTL)
+       int fb_tunnels_only_for_init_net = READ_ONCE(sysctl_fb_tunnels_only_for_init_net);
+
+       return !fb_tunnels_only_for_init_net ||
+               (net_eq(net, &init_net) && fb_tunnels_only_for_init_net == 1);
+#else
+       return true;
+#endif
 }
 
 static inline int netdev_queue_numa_node_read(const struct netdev_queue *q)