diff options
Diffstat (limited to 'net/ipv4/tcp_fastopen.c')
| -rw-r--r-- | net/ipv4/tcp_fastopen.c | 9 | 
1 files changed, 5 insertions, 4 deletions
diff --git a/net/ipv4/tcp_fastopen.c b/net/ipv4/tcp_fastopen.c index fdbcf2a6d08e..825b216d11f5 100644 --- a/net/ipv4/tcp_fastopen.c +++ b/net/ipv4/tcp_fastopen.c @@ -332,7 +332,7 @@ static bool tcp_fastopen_no_cookie(const struct sock *sk,  				   const struct dst_entry *dst,  				   int flag)  { -	return (sock_net(sk)->ipv4.sysctl_tcp_fastopen & flag) || +	return (READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_fastopen) & flag) ||  	       tcp_sk(sk)->fastopen_no_cookie ||  	       (dst && dst_metric(dst, RTAX_FASTOPEN_NO_COOKIE));  } @@ -347,7 +347,7 @@ struct sock *tcp_try_fastopen(struct sock *sk, struct sk_buff *skb,  			      const struct dst_entry *dst)  {  	bool syn_data = TCP_SKB_CB(skb)->end_seq != TCP_SKB_CB(skb)->seq + 1; -	int tcp_fastopen = sock_net(sk)->ipv4.sysctl_tcp_fastopen; +	int tcp_fastopen = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_fastopen);  	struct tcp_fastopen_cookie valid_foc = { .len = -1 };  	struct sock *child;  	int ret = 0; @@ -489,7 +489,7 @@ void tcp_fastopen_active_disable(struct sock *sk)  {  	struct net *net = sock_net(sk); -	if (!sock_net(sk)->ipv4.sysctl_tcp_fastopen_blackhole_timeout) +	if (!READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_fastopen_blackhole_timeout))  		return;  	/* Paired with READ_ONCE() in tcp_fastopen_active_should_disable() */ @@ -510,7 +510,8 @@ void tcp_fastopen_active_disable(struct sock *sk)   */  bool tcp_fastopen_active_should_disable(struct sock *sk)  { -	unsigned int tfo_bh_timeout = sock_net(sk)->ipv4.sysctl_tcp_fastopen_blackhole_timeout; +	unsigned int tfo_bh_timeout = +		READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_fastopen_blackhole_timeout);  	unsigned long timeout;  	int tfo_da_times;  	int multiplier;  |