]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ipv6: annotate data-races over sysctl.flowlabel_reflect
authorEric Dumazet <edumazet@google.com>
Thu, 15 Jan 2026 09:41:38 +0000 (09:41 +0000)
committerJakub Kicinski <kuba@kernel.org>
Mon, 19 Jan 2026 17:56:42 +0000 (09:56 -0800)
Add missing READ_ONCE() when reading ipv6.sysctl.flowlabel_reflect,
as its value can be changed under us.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20260115094141.3124990-6-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv6/af_inet6.c
net/ipv6/icmp.c
net/ipv6/tcp_ipv6.c

index b705751eb73c6b784b74f40ab3d7c0933f8259f0..bd29840659f34b5754a182303d2871c5f884dfce 100644 (file)
@@ -224,8 +224,8 @@ lookup_protocol:
        inet6_set_bit(MC6_LOOP, sk);
        inet6_set_bit(MC6_ALL, sk);
        np->pmtudisc    = IPV6_PMTUDISC_WANT;
-       inet6_assign_bit(REPFLOW, sk, net->ipv6.sysctl.flowlabel_reflect &
-                                    FLOWLABEL_REFLECT_ESTABLISHED);
+       inet6_assign_bit(REPFLOW, sk, READ_ONCE(net->ipv6.sysctl.flowlabel_reflect) &
+                                     FLOWLABEL_REFLECT_ESTABLISHED);
        sk->sk_ipv6only = net->ipv6.sysctl.bindv6only;
        sk->sk_txrehash = READ_ONCE(net->core.sysctl_txrehash);
 
index 5d2f90babaa5f14ea6bd712127e31e891e284130..c72270582d9c507f00464d7dc1c57248f8679f72 100644 (file)
@@ -958,7 +958,8 @@ static enum skb_drop_reason icmpv6_echo_reply(struct sk_buff *skb)
        tmp_hdr.icmp6_type = type;
 
        memset(&fl6, 0, sizeof(fl6));
-       if (net->ipv6.sysctl.flowlabel_reflect & FLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES)
+       if (READ_ONCE(net->ipv6.sysctl.flowlabel_reflect) &
+           FLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES)
                fl6.flowlabel = ip6_flowlabel(ipv6_hdr(skb));
 
        fl6.flowi6_proto = IPPROTO_ICMPV6;
index 280fe59785598e269183bf90f962ea8d58632b9a..4ae664b05fa9171ed996bf8f3b6e7b2aaa63d5c9 100644 (file)
@@ -1085,7 +1085,8 @@ static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb,
                        txhash = inet_twsk(sk)->tw_txhash;
                }
        } else {
-               if (net->ipv6.sysctl.flowlabel_reflect & FLOWLABEL_REFLECT_TCP_RESET)
+               if (READ_ONCE(net->ipv6.sysctl.flowlabel_reflect) &
+                   FLOWLABEL_REFLECT_TCP_RESET)
                        label = ip6_flowlabel(ipv6h);
        }