]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerSasha Levin <sashal@kernel.org>
Wed, 4 Mar 2026 12:20:25 +0000 (07:20 -0500)
[ Upstream commit 5ade47c974b46eb2a1279185962a0ffa15dc5450 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/ipv6/af_inet6.c
net/ipv6/icmp.c
net/ipv6/tcp_ipv6.c

index d3534bdb805da82f74d655535a81e81e39d20c4d..56d453a598ec66db45a1be264541ae2493820bf8 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 55b1aa75ab8028e690746b0e66aef55767b58741..0f41ca6f3d83e86ce97ce5a30613f58f4dc22dad 100644 (file)
@@ -953,7 +953,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);
        }