• Eric Dumazet's avatar
    tcp: fix bug in listening_get_next() · fd0273c5
    Eric Dumazet authored
    commit a8b690f9 (tcp: Fix slowness in read /proc/net/tcp)
    introduced a bug in handling of SYN_RECV sockets.
    
    st->offset represents number of sockets found since beginning of
    listening_hash[st->bucket].
    
    We should not reset st->offset when iterating through
    syn_table[st->sbucket], or else if more than ~25 sockets (if
    PAGE_SIZE=4096) are in SYN_RECV state, we exit from listening_get_next()
    with a too small st->offset
    
    Next time we enter tcp_seek_last_pos(), we are not able to seek past
    already found sockets.
    Reported-by: default avatarPK <runningdoglackey@yahoo.com>
    CC: Tom Herbert <therbert@google.com>
    Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    fd0273c5
tcp_ipv4.c 65.6 KB