netfilter: nf_conntrack: fix tcp_in_window for Fast Open
commit356d7d88e088687b6578ca64601b0a2c9d145296
authorYuchung Cheng <ycheng@google.com>
Sat, 10 Aug 2013 00:21:27 +0000 (9 17:21 -0700)
committerPablo Neira Ayuso <pablo@netfilter.org>
Sat, 10 Aug 2013 16:36:22 +0000 (10 18:36 +0200)
tree99e749ab856f5d1f9084d48f4b8b6e137352287c
parente4d091d7bf787cd303383725b8071d0bae76f981
netfilter: nf_conntrack: fix tcp_in_window for Fast Open

Currently the conntrack checks if the ending sequence of a packet
falls within the observed receive window. However it does so even
if it has not observe any packet from the remote yet and uses an
uninitialized receive window (td_maxwin).

If a connection uses Fast Open to send a SYN-data packet which is
dropped afterward in the network. The subsequent SYNs retransmits
will all fail this check and be discarded, leading to a connection
timeout. This is because the SYN retransmit does not contain data
payload so

end == initial sequence number (isn) + 1
sender->td_end == isn + syn_data_len
receiver->td_maxwin == 0

The fix is to only apply this check after td_maxwin is initialized.

Reported-by: Michael Chan <mcfchan@stanford.edu>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Acked-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nf_conntrack_proto_tcp.c