• Stefan Baranoff's avatar
    tcp: fix sequence numbers for repaired sockets re-using TIME-WAIT sockets · 21684dc4
    Stefan Baranoff authored
    
    
    This patch fixes a bug where the sequence numbers of a socket created using
    TCP repair functionality are lower than set after connect is called.
    This occurs when the repair socket overlaps with a TIME-WAIT socket and
    triggers the re-use code. The amount lower is equal to the number of times
    that a particular IP/port set is re-used and then put back into TIME-WAIT.
    Re-using the first time the sequence number is 1 lower, closing that socket
    and then re-opening (with repair) a new socket with the same addresses/ports
    puts the sequence number 2 lower than set via setsockopt. The third time is
    3 lower, etc. I have not tested what the limit of this acrewal is, if any.
    
    The fix is, if a socket is in repair mode, to respect the already set
    sequence number and timestamp when it would have already re-used the
    TIME-WAIT socket.
    Signed-off-by: default avatarStefan Baranoff <sbaranoff@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    21684dc4
tcp_ipv4.c 68.1 KB