Re: [PATCH net] l2tp: only return sessions of the given tunnel in l2tp_session_get()

From: Guillaume Nault

Date: Mon Oct 26 2026 - 07:53:48 EST


On Sun, Oct 25, 2026 at 10:58:31AM -0400, Hengyu Liang wrote:
> @@ -315,10 +315,19 @@ EXPORT_SYMBOL_GPL(l2tp_v2_session_get);
> struct l2tp_session *l2tp_session_get(const struct net *net, struct sock *sk, int pver,
> u32 tunnel_id, u32 session_id)
> {
> + struct l2tp_session *session;
> +
> if (pver == L2TP_HDR_VER_2)
> return l2tp_v2_session_get(net, tunnel_id, session_id);
> - else
> - return l2tp_v3_session_get(net, sk, session_id);
> +
> + /* An L2TPv3 session ID that has not collided may be in any tunnel */
> + session = l2tp_v3_session_get(net, sk, session_id);
> + if (session && session->tunnel->tunnel_id != tunnel_id) {
> + l2tp_session_put(session);
> + return NULL;
> + }
> +
> + return session;
> }

The original code looks correct to me. L2TPv3 sessions, unlike L2TPv2
ones, are global to all tunnels sharing the same socket.