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

Commit a14d6abc authored by Herbert Xu's avatar Herbert Xu Committed by David S. Miller
Browse files

[PPP] L2TP: Disallow non-UDP datagram sockets



With the addition of UDP-Lite we need to refine the socket check so
that only genuine UDP sockets are allowed through.

Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 21d0c833
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -1326,12 +1326,14 @@ static struct sock *pppol2tp_prepare_tunnel_socket(int fd, u16 tunnel_id,
		goto err;
	}

	sk = sock->sk;

	/* Quick sanity checks */
	err = -ESOCKTNOSUPPORT;
	if (sock->type != SOCK_DGRAM) {
	err = -EPROTONOSUPPORT;
	if (sk->sk_protocol != IPPROTO_UDP) {
		PRINTK(-1, PPPOL2TP_MSG_CONTROL, KERN_ERR,
		       "tunl %hu: fd %d wrong type, got %d, expected %d\n",
		       tunnel_id, fd, sock->type, SOCK_DGRAM);
		       "tunl %hu: fd %d wrong protocol, got %d, expected %d\n",
		       tunnel_id, fd, sk->sk_protocol, IPPROTO_UDP);
		goto err;
	}
	err = -EAFNOSUPPORT;
@@ -1343,7 +1345,6 @@ static struct sock *pppol2tp_prepare_tunnel_socket(int fd, u16 tunnel_id,
	}

	err = -ENOTCONN;
	sk = sock->sk;

	/* Check if this socket has already been prepped */
	tunnel = (struct pppol2tp_tunnel *)sk->sk_user_data;