aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp.c
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2019-10-10 23:17:42 -0400
committerDavid S. Miller <davem@davemloft.net>2019-10-13 13:13:08 -0400
commite0d694d638dba768b47be31c22e1a9b4f862f561 (patch)
treec35cd9fe92b9008fda870b5ae83b3971e6632a60 /net/ipv4/tcp.c
parent0f31746452e6793ad6271337438af8f4defb8940 (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.c3
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;