Merge branch 'for-4.2' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
[firefly-linux-kernel-4.4.55.git] / net / ipv6 / af_inet6.c
index eef63b394c5ab9ae2e2b5c060a9960f62d671a3a..7de52b65173fa6a1b344b13e67106ad39591ed06 100644 (file)
@@ -167,7 +167,7 @@ lookup_protocol:
        WARN_ON(!answer_prot->slab);
 
        err = -ENOBUFS;
-       sk = sk_alloc(net, PF_INET6, GFP_KERNEL, answer_prot);
+       sk = sk_alloc(net, PF_INET6, GFP_KERNEL, answer_prot, kern);
        if (!sk)
                goto out;
 
@@ -362,7 +362,8 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
                np->saddr = addr->sin6_addr;
 
        /* Make sure we are allowed to bind here. */
-       if (sk->sk_prot->get_port(sk, snum)) {
+       if ((snum || !inet->bind_address_no_port) &&
+           sk->sk_prot->get_port(sk, snum)) {
                inet_reset_saddr(sk);
                err = -EADDRINUSE;
                goto out;
@@ -768,6 +769,7 @@ static int __net_init inet6_net_init(struct net *net)
        net->ipv6.sysctl.auto_flowlabels = 0;
        net->ipv6.sysctl.idgen_retries = 3;
        net->ipv6.sysctl.idgen_delay = 1 * HZ;
+       net->ipv6.sysctl.flowlabel_state_ranges = 1;
        atomic_set(&net->ipv6.fib6_sernum, 1);
 
        err = ipv6_init_mibs(net);