]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/l2tp/l2tp_ppp.c
l2tp: unhash l2tp sessions on delete, not on free
[karo-tx-linux.git] / net / l2tp / l2tp_ppp.c
index 9d0eb8c13530df08d51cc3cb0f2bcd0f5707c196..637a341c1e2d1a466c68efcb50d7fc201198a15b 100644 (file)
@@ -466,19 +466,12 @@ static void pppol2tp_session_close(struct l2tp_session *session)
  */
 static void pppol2tp_session_destruct(struct sock *sk)
 {
-       struct l2tp_session *session;
-
-       if (sk->sk_user_data != NULL) {
-               session = sk->sk_user_data;
-               if (session == NULL)
-                       goto out;
-
+       struct l2tp_session *session = sk->sk_user_data;
+       if (session) {
                sk->sk_user_data = NULL;
                BUG_ON(session->magic != L2TP_SESSION_MAGIC);
                l2tp_session_dec_refcount(session);
        }
-
-out:
        return;
 }
 
@@ -509,6 +502,7 @@ static int pppol2tp_release(struct socket *sock)
 
        /* Purge any queued data */
        if (session != NULL) {
+               __l2tp_session_unhash(session);
                l2tp_session_queue_purge(session);
                sock_put(sk);
        }