diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-10-27 19:33:13 +0100 | 
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-10-27 19:33:13 +0100 | 
| commit | c2a552197106b45d0d801d5b8a6be47563a700df (patch) | |
| tree | 61d42c1887b843170874bfec3cacc45211ed916a /net/ipv6/tcp_ipv6.c | |
| parent | 9905f32aefbe3d9cb2d24c3bd9c882397eaf3842 (diff) | |
| parent | d6d5df1db6e9d7f8f76d2911707f7d5877251b02 (diff) | |
Merge 5.4-rc5 into tty-next
We want the tty/serial fix in here as well.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net/ipv6/tcp_ipv6.c')
| -rw-r--r-- | net/ipv6/tcp_ipv6.c | 18 | 
1 files changed, 10 insertions, 8 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index e3d9f4559c99..4804b6dc5e65 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -215,7 +215,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,  	    !ipv6_addr_equal(&sk->sk_v6_daddr, &usin->sin6_addr)) {  		tp->rx_opt.ts_recent = 0;  		tp->rx_opt.ts_recent_stamp = 0; -		tp->write_seq = 0; +		WRITE_ONCE(tp->write_seq, 0);  	}  	sk->sk_v6_daddr = usin->sin6_addr; @@ -311,10 +311,11 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,  	if (likely(!tp->repair)) {  		if (!tp->write_seq) -			tp->write_seq = secure_tcpv6_seq(np->saddr.s6_addr32, -							 sk->sk_v6_daddr.s6_addr32, -							 inet->inet_sport, -							 inet->inet_dport); +			WRITE_ONCE(tp->write_seq, +				   secure_tcpv6_seq(np->saddr.s6_addr32, +						    sk->sk_v6_daddr.s6_addr32, +						    inet->inet_sport, +						    inet->inet_dport));  		tp->tsoffset = secure_tcpv6_ts_off(sock_net(sk),  						   np->saddr.s6_addr32,  						   sk->sk_v6_daddr.s6_addr32); @@ -406,7 +407,7 @@ static int tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,  	tp = tcp_sk(sk);  	/* XXX (TFO) - tp->snd_una should be ISN (tcp_create_openreq_child() */ -	fastopen = tp->fastopen_rsk; +	fastopen = rcu_dereference(tp->fastopen_rsk);  	snd_una = fastopen ? tcp_rsk(fastopen)->snt_isn : tp->snd_una;  	if (sk->sk_state != TCP_LISTEN &&  	    !between(seq, snd_una, tp->snd_nxt)) { @@ -1895,7 +1896,8 @@ static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i)  		/* Because we don't lock the socket,  		 * we might find a transient negative value.  		 */ -		rx_queue = max_t(int, tp->rcv_nxt - tp->copied_seq, 0); +		rx_queue = max_t(int, READ_ONCE(tp->rcv_nxt) - +				      READ_ONCE(tp->copied_seq), 0);  	seq_printf(seq,  		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X " @@ -1906,7 +1908,7 @@ static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i)  		   dest->s6_addr32[0], dest->s6_addr32[1],  		   dest->s6_addr32[2], dest->s6_addr32[3], destp,  		   state, -		   tp->write_seq - tp->snd_una, +		   READ_ONCE(tp->write_seq) - tp->snd_una,  		   rx_queue,  		   timer_active,  		   jiffies_delta_to_clock_t(timer_expires - jiffies),  | 
