l2tp: don't register sessions in l2tp_session_create()
[pandora-kernel.git] / net / l2tp / l2tp_ppp.c
index b308116..e400acf 100644 (file)
@@ -734,6 +734,14 @@ static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
                        error = PTR_ERR(session);
                        goto end;
                }
+
+               l2tp_session_inc_refcount(session);
+               error = l2tp_session_register(session, tunnel);
+               if (error < 0) {
+                       kfree(session);
+                       goto end;
+               }
+               drop_refcnt = true;
        }
 
        /* Associate session with its PPPoL2TP socket */
@@ -821,7 +829,7 @@ static int pppol2tp_session_create(struct net *net, struct l2tp_tunnel *tunnel,
        /* Error if tunnel socket is not prepped */
        if (!tunnel->sock) {
                error = -ENOENT;
-               goto out;
+               goto err;
        }
 
        /* Default MTU values. */
@@ -836,18 +844,21 @@ static int pppol2tp_session_create(struct net *net, struct l2tp_tunnel *tunnel,
                                      peer_session_id, cfg);
        if (IS_ERR(session)) {
                error = PTR_ERR(session);
-               goto out;
+               goto err;
        }
 
        ps = l2tp_session_priv(session);
        ps->tunnel_sock = tunnel->sock;
 
-       PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO,
-              "%s: created\n", session->name);
+       error = l2tp_session_register(session, tunnel);
+       if (error < 0)
+               goto err_sess;
 
-       error = 0;
+       return 0;
 
-out:
+err_sess:
+       kfree(session);
+err:
        return error;
 }