aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_input.c
diff options
context:
space:
mode:
authorNeal Cardwell <ncardwell@google.com>2012-09-22 00:18:57 -0400
committerDavid S. Miller <davem@davemloft.net>2012-09-22 15:47:10 -0400
commite69bebde46b5ddfb7d8f17cae66031e282ebc464 (patch)
tree74fcce514202365cd6c7178699da1da128f29f7f /net/ipv4/tcp_input.c
parent072539880156fafd86c753070e598c23e8e74586 (diff)
tcp: TCP Fast Open Server - call tcp_validate_incoming() for all packets
A TCP Fast Open (TFO) passive connection must call both tcp_check_req() and tcp_validate_incoming() for all incoming ACKs that are attempting to complete the 3WHS. This is needed to parallel all the action that happens for a non-TFO connection, where for an ACK that is attempting to complete the 3WHS we call both tcp_check_req() and tcp_validate_incoming(). For example, upon receiving the ACK that completes the 3WHS, we need to call tcp_fast_parse_options() and update ts_recent based on the incoming timestamp value in the ACK. One symptom of the problem with the previous code was that for passive TFO connections using TCP timestamps, the outgoing TS ecr values ignored the incoming TS val value on the ACK that completed the 3WHS. Signed-off-by: Neal Cardwell <ncardwell@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r--net/ipv4/tcp_input.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index bb326684495b..36e069a1f47b 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -5969,7 +5969,8 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
5969 5969
5970 if (tcp_check_req(sk, skb, req, NULL, true) == NULL) 5970 if (tcp_check_req(sk, skb, req, NULL, true) == NULL)
5971 goto discard; 5971 goto discard;
5972 } else if (!tcp_validate_incoming(sk, skb, th, 0)) 5972 }
5973 if (!tcp_validate_incoming(sk, skb, th, 0))
5973 return 0; 5974 return 0;
5974 5975
5975 /* step 5: check the ACK field */ 5976 /* step 5: check the ACK field */