Skip to content
  • Jere Leppänen's avatar
    sctp: Start shutdown on association restart if in SHUTDOWN-SENT state and socket is closed · d3e8e4c1
    Jere Leppänen authored
    Commit bdf6fa52 ("sctp: handle association restarts when the
    socket is closed.") starts shutdown when an association is restarted,
    if in SHUTDOWN-PENDING state and the socket is closed. However, the
    rationale stated in that commit applies also when in SHUTDOWN-SENT
    state - we don't want to move an association to ESTABLISHED state when
    the socket has been closed, because that results in an association
    that is unreachable from user space.
    
    The problem scenario:
    
    1.  Client crashes and/or restarts.
    
    2.  Server (using one-to-one socket) calls close(). SHUTDOWN is lost.
    
    3.  Client reconnects using the same addresses and ports.
    
    4.  Server's association is restarted. The association and the socket
        move to ESTABLISHED state, even though the server process has
        closed its descriptor.
    
    Also, after step 4 when the server process exits, some resources are
    leaked in an attempt to release the underlying inet sock structure in
    ESTABLISHED state:
    
        IPv4: Attempt to release TCP socket in state 1 00000000377288c7
    
    Fix by acting the same way as in SHUTDOWN-PENDING state. That is, if
    an association is restarted in SHUTDOWN-SENT state and the socket is
    closed, then start shutdown and don't move the association or the
    socket to ESTABLISHED state.
    
    Fixes: bdf6fa52
    
     ("sctp: handle association restarts when the socket is closed.")
    Signed-off-by: default avatarJere Leppänen <jere.leppanen@nokia.com>
    Acked-by: default avatarMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d3e8e4c1