|
@@ -1457,9 +1457,14 @@ int l2tp_tunnel_create(struct net *net, int fd, int version, u32 tunnel_id, u32
|
|
|
encap = cfg->encap;
|
|
|
|
|
|
/* Quick sanity checks */
|
|
|
+ err = -EPROTONOSUPPORT;
|
|
|
+ if (sk->sk_type != SOCK_DGRAM) {
|
|
|
+ pr_debug("tunl %hu: fd %d wrong socket type\n",
|
|
|
+ tunnel_id, fd);
|
|
|
+ goto err;
|
|
|
+ }
|
|
|
switch (encap) {
|
|
|
case L2TP_ENCAPTYPE_UDP:
|
|
|
- err = -EPROTONOSUPPORT;
|
|
|
if (sk->sk_protocol != IPPROTO_UDP) {
|
|
|
pr_err("tunl %hu: fd %d wrong protocol, got %d, expected %d\n",
|
|
|
tunnel_id, fd, sk->sk_protocol, IPPROTO_UDP);
|
|
@@ -1467,7 +1472,6 @@ int l2tp_tunnel_create(struct net *net, int fd, int version, u32 tunnel_id, u32
|
|
|
}
|
|
|
break;
|
|
|
case L2TP_ENCAPTYPE_IP:
|
|
|
- err = -EPROTONOSUPPORT;
|
|
|
if (sk->sk_protocol != IPPROTO_L2TP) {
|
|
|
pr_err("tunl %hu: fd %d wrong protocol, got %d, expected %d\n",
|
|
|
tunnel_id, fd, sk->sk_protocol, IPPROTO_L2TP);
|