diff options
author | Eric Dumazet <edumazet@google.com> | 2019-10-10 23:17:42 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-10-13 13:13:08 -0400 |
commit | e0d694d638dba768b47be31c22e1a9b4f862f561 (patch) | |
tree | c35cd9fe92b9008fda870b5ae83b3971e6632a60 /net/ipv4/tcp.c | |
parent | 0f31746452e6793ad6271337438af8f4defb8940 (diff) |
tcp: annotate tp->snd_nxt lockless reads
There are few places where we fetch tp->snd_nxt while
this field can change from IRQ or other cpu.
We need to add READ_ONCE() annotations, and also make
sure write sides use corresponding WRITE_ONCE() to avoid
store-tearing.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp.c')
-rw-r--r-- | net/ipv4/tcp.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 96dd65cbeb85..652568750cb1 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
@@ -625,7 +625,8 @@ int tcp_ioctl(struct sock *sk, int cmd, unsigned long arg) | |||
625 | if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV)) | 625 | if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV)) |
626 | answ = 0; | 626 | answ = 0; |
627 | else | 627 | else |
628 | answ = READ_ONCE(tp->write_seq) - tp->snd_nxt; | 628 | answ = READ_ONCE(tp->write_seq) - |
629 | READ_ONCE(tp->snd_nxt); | ||
629 | break; | 630 | break; |
630 | default: | 631 | default: |
631 | return -ENOIOCTLCMD; | 632 | return -ENOIOCTLCMD; |