• David S. Miller's avatar
    ax25: Fix std timer socket destroy handling. · 30902dc3
    David S. Miller authored
    Tihomir Heidelberg - 9a4gl, reports:
    
    --------------------
    I would like to direct you attention to one problem existing in ax.25
    kernel since 2.4. If listening socket is closed and its SKB queue is
    released but those sockets get weird. Those "unAccepted()" sockets
    should be destroyed in ax25_std_heartbeat_expiry, but it will not
    happen. And there is also a note about that in ax25_std_timer.c:
    /* Magic here: If we listen() and a new link dies before it
    is accepted() it isn't 'dead' so doesn't get removed. */
    
    This issue cause ax25d to stop accepting new connections and I had to
    restarted ax25d approximately each day and my services were unavailable.
    Also netstat -n -l shows invalid source and device for those listening
    sockets. It is strange why ax25d's listening socket get weird because of
    this issue, but definitely when I solved this bug I do not have problems
    with ax25d anymore and my ax25d can run for months without problems.
    --------------------
    
    Actually as far as I can see, this problem is even in releases
    as far back as 2.2.x as well.
    
    It seems senseless to special case this test on TCP_LISTEN state.
    Anything still stuck in state 0 has no external references and
    we can just simply kill it off directly.
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    30902dc3
ax25_std_timer.c 4.08 KB