[IPV6]: Fix per-socket multicast filtering in sk_reuse case
authorDavid L Stevens <dlstevens@us.ibm.com>
Thu, 15 Sep 2005 04:10:20 +0000 (21:10 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 15 Sep 2005 04:10:20 +0000 (21:10 -0700)
per-socket multicast filters were not being applied to all sockets
in the case of an exact-match bound address, due to an over-exuberant
"return" in the look-up code. Fix below. IPv4 does not have this problem.

Thanks to Hoerdt Mickael for reporting the bug.

Signed-off-by: David L Stevens <dlstevens@us.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/udp.c

index 69b146843a20215a7c816a5b07e37788b5bf12c7..2b9bf9bd177f8353c7ab67c1b9e7bd52fd6703c8 100644 (file)
@@ -405,9 +405,8 @@ static struct sock *udp_v6_mcast_next(struct sock *sk,
                                continue;
 
                        if (!ipv6_addr_any(&np->rcv_saddr)) {
                                continue;
 
                        if (!ipv6_addr_any(&np->rcv_saddr)) {
-                               if (ipv6_addr_equal(&np->rcv_saddr, loc_addr))
-                                       return s;
-                               continue;
+                               if (!ipv6_addr_equal(&np->rcv_saddr, loc_addr))
+                                       continue;
                        }
                        if(!inet6_mc_check(s, loc_addr, rmt_addr))
                                continue;
                        }
                        if(!inet6_mc_check(s, loc_addr, rmt_addr))
                                continue;