From a25ea24f7b7d71c7338713bfe050342c3289aa86 Mon Sep 17 00:00:00 2001 From: Davide Caratti Date: Wed, 26 Apr 2017 19:07:35 +0200 Subject: [PATCH] UPSTREAM: tcp: fix access to sk->sk_state in tcp_poll() commit d68be71ea14d609a5f31534003319be5db422595 upstream. avoid direct access to sk->sk_state when tcp_poll() is called on a socket using active TCP fastopen with deferred connect. Use local variable 'state', which stores the result of sk_state_load(), like it was done in commit 00fd38d938db ("tcp: ensure proper barriers in lockless contexts"). Fixes: 19f6d3f3c842 ("net/tcp-fastopen: Add new API support") Signed-off-by: Davide Caratti Acked-by: Wei Wang Signed-off-by: David S. Miller Change-Id: I5f5510a070a3d634bac28c4edbb64e362bab59b0 Fixes: Change-Id: Icc181febd74e3117c2fc835d7ed935e107b5815e ("BACKPORT: net/tcp-fastopen: Add new API support") Signed-off-by: Amit Pundir --- net/ipv4/tcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index ee3dde5ff32f..7ea802775a98 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -538,7 +538,7 @@ unsigned int tcp_poll(struct file *file, struct socket *sock, poll_table *wait) if (tp->urg_data & TCP_URG_VALID) mask |= POLLPRI; - } else if (sk->sk_state == TCP_SYN_SENT && inet_sk(sk)->defer_connect) { + } else if (state == TCP_SYN_SENT && inet_sk(sk)->defer_connect) { /* Active TCP fastopen socket with defer_connect * Return POLLOUT so application can call write() * in order for kernel to generate SYN+data