netfilter: conntrack: connection timeout after re-register
authorFrancesco Ruggeri <fruggeri@arista.com>
Wed, 7 Oct 2020 19:32:52 +0000 (12:32 -0700)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 20 Oct 2020 11:54:53 +0000 (13:54 +0200)
commit4f25434bccc28cf8a07876ef5142a2869a674353
treead57d912022c7ec6be42bc0bed4fb52d1e3bdeac
parent79dce09ab02729a90cf6ce49c9aaaf17aa0d21db
netfilter: conntrack: connection timeout after re-register

If the first packet conntrack sees after a re-register is an outgoing
keepalive packet with no data (SEG.SEQ = SND.NXT-1), td_end is set to
SND.NXT-1.
When the peer correctly acknowledges SND.NXT, tcp_in_window fails
check III (Upper bound for valid (s)ack: sack <= receiver.td_end) and
returns false, which cascades into nf_conntrack_in setting
skb->_nfct = 0 and in later conntrack iptables rules not matching.
In cases where iptables are dropping packets that do not match
conntrack rules this can result in idle tcp connections to time out.

v2: adjust td_end when getting the reply rather than when sending out
    the keepalive packet.

Fixes: f94e63801ab2 ("netfilter: conntrack: reset tcp maxwin on re-register")
Signed-off-by: Francesco Ruggeri <fruggeri@arista.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nf_conntrack_proto_tcp.c