diff options
author | Eric Dumazet <edumazet@google.com> | 2016-02-01 21:03:07 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-02-06 03:11:59 -0500 |
commit | 61d2bcae99f66a640b3dd9632180209143fb5512 (patch) | |
tree | 23b90b077db8d7abd03efdfe331720e12c70e219 /net/ipv4/tcp_input.c | |
parent | df03288bb49a7da9023de5d9e4dabd882db3abd7 (diff) | |
download | op-kernel-dev-61d2bcae99f66a640b3dd9632180209143fb5512.zip op-kernel-dev-61d2bcae99f66a640b3dd9632180209143fb5512.tar.gz |
tcp: fastopen: accept data/FIN present in SYNACK message
RFC 7413 (TCP Fast Open) 4.2.2 states that the SYNACK message
MAY include data and/or FIN
This patch adds support for the client side :
If we receive a SYNACK with payload or FIN, queue the skb instead
of ignoring it.
Since we already support the same for SYN, we refactor the existing
code and reuse it. Note we need to clone the skb, so this operation
might fail under memory pressure.
Sara Dickinson pointed out FreeBSD server Fast Open implementation
was planned to generate such SYNACK in the future.
The server side might be implemented on linux later.
Reported-by: Sara Dickinson <sara@sinodun.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
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.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 1c2a734..4add3eb 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -5509,6 +5509,9 @@ static bool tcp_rcv_fastopen_synack(struct sock *sk, struct sk_buff *synack, tp->syn_data_acked = tp->syn_data; if (tp->syn_data_acked) NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPFASTOPENACTIVE); + + tcp_fastopen_add_skb(sk, synack); + return false; } |