l2tp: cleanup eth/ppp pseudowire setup code
authorJames Chapman <jchapman@katalix.com>
Mon, 29 Jul 2024 15:38:13 +0000 (16:38 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 31 Jul 2024 08:25:13 +0000 (09:25 +0100)
l2tp eth/ppp pseudowire setup/cleanup uses kfree() in some error
paths. Drop the refcount instead such that the session object is
always freed when the refcount reaches 0.

Signed-off-by: James Chapman <jchapman@katalix.com>
Signed-off-by: Tom Parkin <tparkin@katalix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/l2tp/l2tp_eth.c
net/l2tp/l2tp_ppp.c

index 8ba00ad433c21bfc8f6566bed1360cb8e4cf4944..cc8a3ce716e94580db275d3c9cf7f757872fe4b9 100644 (file)
@@ -322,7 +322,7 @@ err_sess_dev:
        l2tp_session_dec_refcount(session);
        free_netdev(dev);
 err_sess:
-       kfree(session);
+       l2tp_session_dec_refcount(session);
 err:
        return rc;
 }
index 1b79a36d5756dd25056ba5e6abe7b371f6f5a6b9..90bf3a8ccab6690e75d2c15a84fb87c38f636078 100644 (file)
@@ -770,6 +770,8 @@ static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
                        goto end;
                }
 
+               drop_refcnt = true;
+
                pppol2tp_session_init(session);
                ps = l2tp_session_priv(session);
                l2tp_session_inc_refcount(session);
@@ -778,10 +780,10 @@ static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
                error = l2tp_session_register(session, tunnel);
                if (error < 0) {
                        mutex_unlock(&ps->sk_lock);
-                       kfree(session);
+                       l2tp_session_dec_refcount(session);
                        goto end;
                }
-               drop_refcnt = true;
+
                new_session = true;
        }
 
@@ -875,7 +877,7 @@ static int pppol2tp_session_create(struct net *net, struct l2tp_tunnel *tunnel,
        return 0;
 
 err_sess:
-       kfree(session);
+       l2tp_session_dec_refcount(session);
 err:
        return error;
 }