]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/ipv6/datagram.c
[ARM] 4989/1: [AT91] SAM9 ClockSource / ClockEvents
[linux-2.6-omap-h63xx.git] / net / ipv6 / datagram.c
index 2ed689ac449ec67cd6e0519b1a4ddab4d156e43d..94fa6ae77cfe28c6f92c04e336cc56aedfbf4507 100644 (file)
@@ -123,11 +123,11 @@ ipv4_connected:
                                goto out;
                        }
                        sk->sk_bound_dev_if = usin->sin6_scope_id;
-                       if (!sk->sk_bound_dev_if &&
-                           (addr_type & IPV6_ADDR_MULTICAST))
-                               fl.oif = np->mcast_oif;
                }
 
+               if (!sk->sk_bound_dev_if && (addr_type & IPV6_ADDR_MULTICAST))
+                       sk->sk_bound_dev_if = np->mcast_oif;
+
                /* Connect to link-local address requires an interface */
                if (!sk->sk_bound_dev_if) {
                        err = -EINVAL;
@@ -177,7 +177,7 @@ ipv4_connected:
        if (final_p)
                ipv6_addr_copy(&fl.fl6_dst, final_p);
 
-       if ((err = __xfrm_lookup(&dst, &fl, sk, 1)) < 0) {
+       if ((err = __xfrm_lookup(&dst, &fl, sk, XFRM_LOOKUP_WAIT)) < 0) {
                if (err == -EREMOTE)
                        err = ip6_dst_blackhole(sk, &dst, &fl);
                if (err < 0)
@@ -549,7 +549,8 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl,
                                                return -ENODEV;
                                }
                        }
-                       if (!ipv6_chk_addr(&src_info->ipi6_addr, dev, 0)) {
+                       if (!ipv6_chk_addr(&init_net, &src_info->ipi6_addr,
+                                          dev, 0)) {
                                if (dev)
                                        dev_put(dev);
                                err = -EINVAL;