]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
tcp: annotate data-races around tp->bytes_sent
authorEric Dumazet <edumazet@google.com>
Thu, 16 Apr 2026 20:03:12 +0000 (20:03 +0000)
committerJakub Kicinski <kuba@kernel.org>
Sat, 18 Apr 2026 18:10:12 +0000 (11:10 -0700)
tcp_get_timestamping_opt_stats() intentionally runs lockless, we must
add READ_ONCE() and WRITE_ONCE() annotations to keep KCSAN happy.

Fixes: ba113c3aa79a ("tcp: add data bytes sent stats")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20260416200319.3608680-8-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv4/tcp.c
net/ipv4/tcp_output.c

index 729936d13a5c6d9c39edc880636e01cf0973688e..f999b86851cdcc2a9b9ce379397e55293871c00a 100644 (file)
@@ -4461,7 +4461,7 @@ struct sk_buff *tcp_get_timestamping_opt_stats(const struct sock *sk,
                          READ_ONCE(tp->write_seq) - READ_ONCE(tp->snd_una)));
        nla_put_u8(stats, TCP_NLA_CA_STATE, inet_csk(sk)->icsk_ca_state);
 
-       nla_put_u64_64bit(stats, TCP_NLA_BYTES_SENT, tp->bytes_sent,
+       nla_put_u64_64bit(stats, TCP_NLA_BYTES_SENT, READ_ONCE(tp->bytes_sent),
                          TCP_NLA_PAD);
        nla_put_u64_64bit(stats, TCP_NLA_BYTES_RETRANS, tp->bytes_retrans,
                          TCP_NLA_PAD);
index 9f83c7e4acabc64f0a45e4879c326694a306b368..87af4731df87ea5f310d39b1392cb995d4fa8f78 100644 (file)
@@ -1690,7 +1690,8 @@ static int __tcp_transmit_skb(struct sock *sk, struct sk_buff *skb,
                tcp_event_data_sent(tp, sk);
                WRITE_ONCE(tp->data_segs_out,
                           tp->data_segs_out + tcp_skb_pcount(skb));
-               tp->bytes_sent += skb->len - tcp_header_size;
+               WRITE_ONCE(tp->bytes_sent,
+                          tp->bytes_sent + skb->len - tcp_header_size);
        }
 
        if (after(tcb->end_seq, tp->snd_nxt) || tcb->seq == tcb->end_seq)