• Alexey Kodanev's avatar
    tcp: setup timestamp offset when write_seq already set · 00355fa5
    Alexey Kodanev authored
    Found that when randomized tcp offsets are enabled (by default)
    TCP client can still start new connections without them. Later,
    if server does active close and re-uses sockets in TIME-WAIT
    state, new SYN from client can be rejected on PAWS check inside
    tcp_timewait_state_process(), because either tw_ts_recent or
    rcv_tsval doesn't really have an offset set.
    
    Here is how to reproduce it with LTP netstress tool:
        netstress -R 1 &
        netstress -H 127.0.0.1 -lr 1000000 -a1
    
        [...]
        < S  seq 1956977072 win 43690 TS val 295618 ecr 459956970
        > .  ack 1956911535 win 342 TS val 459967184 ecr 1547117608
        < R  seq 1956911535 win 0 length 0
    +1. < S  seq 1956977072 win 43690 TS val 296640 ecr 459956970
        > S. seq 657450664 ack 1956977073 win 43690 TS val 459968205 ecr 296640
    
    Fixes: 95a22cae ("tcp: randomize tcp timestamp offsets for each connection")
    Signed-off-by: default avatarAlexey Kodanev <alexey.kodanev@oracle.com>
    Acked-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    00355fa5
tcp_ipv4.c 63.5 KB