3.13.11.5 -stable review patch.  If anyone has any objections, please let me 
know.

------------------

From: Sven Wegener <[email protected]>

commit 3bfdc59a6c24608ed23e903f670aaf5f58c7a6f3 upstream.

Commit efe4208 ("ipv6: make lookups simpler and faster") introduced a
regression in udp_v6_mcast_next(), resulting in multicast packets not
reaching the destination sockets under certain conditions.

The packet's IPv6 addresses are wrongly compared to the IPv6 addresses
from the function's socket argument, which indicates the starting point
for looping, instead of the loop variable. If the addresses from the
first socket do not match the packet's addresses, no socket in the list
will match.

Signed-off-by: Sven Wegener <[email protected]>
Acked-by: Eric Dumazet <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Cc: Tim Gardner <[email protected]>
Signed-off-by: Kamal Mostafa <[email protected]>
---
 net/ipv6/udp.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index 089c741..6028bc74 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -711,15 +711,15 @@ static struct sock *udp_v6_mcast_next(struct net *net, 
struct sock *sk,
                                if (inet->inet_dport != rmt_port)
                                        continue;
                        }
-                       if (!ipv6_addr_any(&sk->sk_v6_daddr) &&
-                           !ipv6_addr_equal(&sk->sk_v6_daddr, rmt_addr))
+                       if (!ipv6_addr_any(&s->sk_v6_daddr) &&
+                           !ipv6_addr_equal(&s->sk_v6_daddr, rmt_addr))
                                continue;
 
                        if (s->sk_bound_dev_if && s->sk_bound_dev_if != dif)
                                continue;
 
-                       if (!ipv6_addr_any(&sk->sk_v6_rcv_saddr)) {
-                               if (!ipv6_addr_equal(&sk->sk_v6_rcv_saddr, 
loc_addr))
+                       if (!ipv6_addr_any(&s->sk_v6_rcv_saddr)) {
+                               if (!ipv6_addr_equal(&s->sk_v6_rcv_saddr, 
loc_addr))
                                        continue;
                        }
                        if (!inet6_mc_check(s, loc_addr, rmt_addr))
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to