diff options
Diffstat (limited to 'net/ipv4/tcp_output.c')
| -rw-r--r-- | net/ipv4/tcp_output.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index a50e1990a845..5f5b2f0b0e60 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -700,7 +700,8 @@ static unsigned int tcp_synack_options(const struct sock *sk,  				       unsigned int mss, struct sk_buff *skb,  				       struct tcp_out_options *opts,  				       const struct tcp_md5sig_key *md5, -				       struct tcp_fastopen_cookie *foc) +				       struct tcp_fastopen_cookie *foc, +				       enum tcp_synack_type synack_type)  {  	struct inet_request_sock *ireq = inet_rsk(req);  	unsigned int remaining = MAX_TCP_OPTION_SPACE; @@ -715,7 +716,8 @@ static unsigned int tcp_synack_options(const struct sock *sk,  		 * rather than TS in order to fit in better with old,  		 * buggy kernels, but that was deemed to be unnecessary.  		 */ -		ireq->tstamp_ok &= !ireq->sack_ok; +		if (synack_type != TCP_SYNACK_COOKIE) +			ireq->tstamp_ok &= !ireq->sack_ok;  	}  #endif @@ -3394,7 +3396,7 @@ struct sk_buff *tcp_make_synack(const struct sock *sk, struct dst_entry *dst,  #endif  	skb_set_hash(skb, tcp_rsk(req)->txhash, PKT_HASH_TYPE_L4);  	tcp_header_size = tcp_synack_options(sk, req, mss, skb, &opts, md5, -					     foc) + sizeof(*th); +					     foc, synack_type) + sizeof(*th);  	skb_push(skb, tcp_header_size);  	skb_reset_transport_header(skb);  | 
