• Francesco Ruggeri's avatar
    netfilter: conntrack: connection timeout after re-register · 4f25434b
    Francesco Ruggeri authored
    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: f94e6380 ("netfilter: conntrack: reset tcp maxwin on re-register")
    Signed-off-by: default avatarFrancesco Ruggeri <fruggeri@arista.com>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    4f25434b
nf_conntrack_proto_tcp.c 44.9 KB