• Marcelo Leitner's avatar
    netfilter: nf_conntrack: allow server to become a client in TW handling · e37ad9fd
    Marcelo Leitner authored
    When a port that was used to listen for inbound connections gets closed
    and reused for outgoing connections (like rsh ends up doing for stderr
    flow), current we may reject the SYN/ACK packet for the new connection
    because tcp_conntracks states forbirds a port to become a client while
    there is still a TIME_WAIT entry in there for it.
    
    As TCP may expire the TIME_WAIT socket in 60s and conntrack's timeout
    for it is 120s, there is a ~60s window that the application can end up
    opening a port that conntrack will end up blocking.
    
    This patch fixes this by simply allowing such state transition: if we
    see a SYN, in TIME_WAIT state, on REPLY direction, move it to sSS. Note
    that the rest of the code already handles this situation, more
    specificly in tcp_packet(), first switch clause.
    Signed-off-by: default avatarMarcelo Ricardo Leitner <mleitner@redhat.com>
    Acked-by: default avatarJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    e37ad9fd
nf_conntrack_proto_tcp.c 51.5 KB