These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / net / ipv6 / ip6_udp_tunnel.c
index bba8903..14dacf1 100644 (file)
@@ -19,11 +19,18 @@ int udp_sock_create6(struct net *net, struct udp_port_cfg *cfg,
        int err;
        struct socket *sock = NULL;
 
-       err = sock_create_kern(AF_INET6, SOCK_DGRAM, 0, &sock);
+       err = sock_create_kern(net, AF_INET6, SOCK_DGRAM, 0, &sock);
        if (err < 0)
                goto error;
 
-       sk_change_net(sock->sk, net);
+       if (cfg->ipv6_v6only) {
+               int val = 1;
+
+               err = kernel_setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY,
+                                       (char *) &val, sizeof(val));
+               if (err < 0)
+                       goto error;
+       }
 
        udp6_addr.sin6_family = AF_INET6;
        memcpy(&udp6_addr.sin6_addr, &cfg->local_ip6,
@@ -55,7 +62,7 @@ int udp_sock_create6(struct net *net, struct udp_port_cfg *cfg,
 error:
        if (sock) {
                kernel_sock_shutdown(sock, SHUT_RDWR);
-               sk_release_kernel(sock->sk);
+               sock_release(sock);
        }
        *sockp = NULL;
        return err;