• Neal Cardwell's avatar
    inet_diag: fix inet_diag_dump_icsk() to use correct state for timewait sockets · 70315d22
    Neal Cardwell authored
    Fix inet_diag_dump_icsk() to reflect the fact that both TCP_TIME_WAIT
    and TCP_FIN_WAIT2 connections are represented by inet_timewait_sock
    (not just TIME_WAIT), and for such sockets the tw_substate field holds
    the real state, which can be either TCP_TIME_WAIT or TCP_FIN_WAIT2.
    
    This brings the inet_diag state-matching code in line with the field
    it uses to populate idiag_state. This is also analogous to the info
    exported in /proc/net/tcp, where get_tcp4_sock() exports sk->sk_state
    and get_timewait4_sock() exports tw->tw_substate.
    
    Before fixing this, (a) neither "ss -nemoi" nor "ss -nemoi state
    fin-wait-2" would return a socket in TCP_FIN_WAIT2; and (b) "ss -nemoi
    state time-wait" would also return sockets in state TCP_FIN_WAIT2.
    
    This is an old bug that predates 05dbc7b5 ("tcp/dccp: remove twchain").
    Signed-off-by: default avatarNeal Cardwell <ncardwell@google.com>
    Cc: Eric Dumazet <edumazet@google.com>
    Acked-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    70315d22
inet_diag.c 28.2 KB