• Guillaume Nault's avatar
    l2tp: hold reference on tunnels printed in pppol2tp proc file · 0e0c3fee
    Guillaume Nault authored
    Use l2tp_tunnel_get_nth() instead of l2tp_tunnel_find_nth(), to be safe
    against concurrent tunnel deletion.
    
    Unlike sessions, we can't drop the reference held on tunnels in
    pppol2tp_seq_show(). Tunnels are reused across several calls to
    pppol2tp_seq_start() when iterating over sessions. These iterations
    need the tunnel for accessing the next session. Therefore the only safe
    moment for dropping the reference is just before searching for the next
    tunnel.
    
    Normally, the last invocation of pppol2tp_next_tunnel() doesn't find
    any new tunnel, so it drops the last tunnel without taking any new
    reference. However, in case of error, pppol2tp_seq_stop() is called
    directly, so we have to drop the reference there.
    
    Fixes: fd558d18 ("l2tp: Split pppol2tp patch into separate l2tp and ppp parts")
    Signed-off-by: default avatarGuillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0e0c3fee
l2tp_ppp.c 46.9 KB