Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02d13ed5 authored by Tom Parkin's avatar Tom Parkin Committed by David S. Miller
Browse files

l2tp: don't BUG_ON sk_socket being NULL



It is valid for an existing struct sock object to have a NULL sk_socket
pointer, so don't BUG_ON in l2tp_tunnel_del_work if that should occur.

Signed-off-by: default avatarTom Parkin <tparkin@katalix.com>
Signed-off-by: default avatarJames Chapman <jchapman@katalix.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8abbbe8f
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -1412,19 +1412,21 @@ static void l2tp_tunnel_del_work(struct work_struct *work)
		return;

	sock = sk->sk_socket;
	BUG_ON(!sock);

	/* If the tunnel socket was created directly by the kernel, use the
	 * sk_* API to release the socket now.  Otherwise go through the
	 * inet_* layer to shut the socket down, and let userspace close it.
	/* If the tunnel socket was created by userspace, then go through the
	 * inet layer to shut the socket down, and let userspace close it.
	 * Otherwise, if we created the socket directly within the kernel, use
	 * the sk API to release it here.
	 * In either case the tunnel resources are freed in the socket
	 * destructor when the tunnel socket goes away.
	 */
	if (sock->file == NULL) {
	if (tunnel->fd >= 0) {
		if (sock)
			inet_shutdown(sock, 2);
	} else {
		if (sock)
			kernel_sock_shutdown(sock, SHUT_RDWR);
		sk_release_kernel(sk);
	} else {
		inet_shutdown(sock, 2);
	}

	l2tp_tunnel_sock_put(sk);