Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf
[linux-2.6-block.git] / net / ipv4 / ip_sockglue.c
index c7df4969f80aada73250d8f15d52d453f9fd9595..008be04ac1cc5e3729ed2265f5cfe3b3b64e20f3 100644 (file)
@@ -808,6 +808,7 @@ static int do_ip_setsockopt(struct sock *sk, int level,
        {
                struct net_device *dev = NULL;
                int ifindex;
+               int midx;
 
                if (optlen != sizeof(int))
                        goto e_inval;
@@ -823,10 +824,13 @@ static int do_ip_setsockopt(struct sock *sk, int level,
                err = -EADDRNOTAVAIL;
                if (!dev)
                        break;
+
+               midx = l3mdev_master_ifindex(dev);
                dev_put(dev);
 
                err = -EINVAL;
-               if (sk->sk_bound_dev_if)
+               if (sk->sk_bound_dev_if &&
+                   (!midx || midx != sk->sk_bound_dev_if))
                        break;
 
                inet->uc_index = ifindex;