Skip to content
  • Tom Parkin's avatar
    l2tp: add udp encap socket destroy handler · 9980d001
    Tom Parkin authored
    
    
    L2TP sessions hold a reference to the tunnel socket to prevent it going away
    while sessions are still active.  However, since tunnel destruction is handled
    by the sock sk_destruct callback there is a catch-22: a tunnel with sessions
    cannot be deleted since each session holds a reference to the tunnel socket.
    If userspace closes a managed tunnel socket, or dies, the tunnel will persist
    and it will be neccessary to individually delete the sessions using netlink
    commands.  This is ugly.
    
    To prevent this occuring, this patch leverages the udp encapsulation socket
    destroy callback to gain early notification when the tunnel socket is closed.
    This allows us to safely close the sessions running in the tunnel, dropping
    the tunnel socket references in the process.  The tunnel socket is then
    destroyed as normal, and the tunnel resources deallocated in sk_destruct.
    
    While we're at it, ensure that l2tp_tunnel_closeall correctly drops session
    references to allow the sessions to be deleted rather than leaking.
    
    Signed-off-by: default avatarTom Parkin <tparkin@katalix.com>
    Signed-off-by: default avatarJames Chapman <jchapman@katalix.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    9980d001