diff options
Diffstat (limited to 'net/ipv4/tcp_output.c')
| -rw-r--r-- | net/ipv4/tcp_output.c | 6 | 
1 files changed, 3 insertions, 3 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 2cb39b6dad02..51d8638d4b4c 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -878,7 +878,7 @@ static unsigned int tcp_synack_options(const struct sock *sk,  	if (likely(ireq->tstamp_ok)) {  		opts->options |= OPTION_TS;  		opts->tsval = tcp_skb_timestamp(skb) + tcp_rsk(req)->ts_off; -		opts->tsecr = req->ts_recent; +		opts->tsecr = READ_ONCE(req->ts_recent);  		remaining -= TCPOLEN_TSTAMP_ALIGNED;  	}  	if (likely(ireq->sack_ok)) { @@ -3660,7 +3660,7 @@ struct sk_buff *tcp_make_synack(const struct sock *sk, struct dst_entry *dst,  	rcu_read_lock();  	md5 = tcp_rsk(req)->af_specific->req_md5_lookup(sk, req_to_sk(req));  #endif -	skb_set_hash(skb, tcp_rsk(req)->txhash, PKT_HASH_TYPE_L4); +	skb_set_hash(skb, READ_ONCE(tcp_rsk(req)->txhash), PKT_HASH_TYPE_L4);  	/* bpf program will be interested in the tcp_flags */  	TCP_SKB_CB(skb)->tcp_flags = TCPHDR_SYN | TCPHDR_ACK;  	tcp_header_size = tcp_synack_options(sk, req, mss, skb, &opts, md5, @@ -4210,7 +4210,7 @@ int tcp_rtx_synack(const struct sock *sk, struct request_sock *req)  	/* Paired with WRITE_ONCE() in sock_setsockopt() */  	if (READ_ONCE(sk->sk_txrehash) == SOCK_TXREHASH_ENABLED) -		tcp_rsk(req)->txhash = net_tx_rndhash(); +		WRITE_ONCE(tcp_rsk(req)->txhash, net_tx_rndhash());  	res = af_ops->send_synack(sk, NULL, &fl, req, NULL, TCP_SYNACK_NORMAL,  				  NULL);  	if (!res) {  | 
