kernel: update 3.18 to 3.18.16
[openwrt/openwrt.git] / target / linux / generic / patches-3.18 / 051-01-bridge-fix-parsing-of-MLDv2-reports.patch
1 From 1430a5975e1a5f249875faab7fd35b915a8d2397 Mon Sep 17 00:00:00 2001
2 From: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>
3 Date: Fri, 22 May 2015 12:18:59 -0300
4 Subject: [PATCH] bridge: fix parsing of MLDv2 reports
5
6 When more than a multicast address is present in a MLDv2 report, all but
7 the first address is ignored, because the code breaks out of the loop if
8 there has not been an error adding that address.
9
10 This has caused failures when two guests connected through the bridge
11 tried to communicate using IPv6. Neighbor discoveries would not be
12 transmitted to the other guest when both used a link-local address and a
13 static address.
14
15 This only happens when there is a MLDv2 querier in the network.
16
17 The fix will only break out of the loop when there is a failure adding a
18 multicast address.
19
20 The mdb before the patch:
21
22 dev ovirtmgmt port vnet0 grp ff02::1:ff7d:6603 temp
23 dev ovirtmgmt port vnet1 grp ff02::1:ff7d:6604 temp
24 dev ovirtmgmt port bond0.86 grp ff02::2 temp
25
26 After the patch:
27
28 dev ovirtmgmt port vnet0 grp ff02::1:ff7d:6603 temp
29 dev ovirtmgmt port vnet1 grp ff02::1:ff7d:6604 temp
30 dev ovirtmgmt port bond0.86 grp ff02::fb temp
31 dev ovirtmgmt port bond0.86 grp ff02::2 temp
32 dev ovirtmgmt port bond0.86 grp ff02::d temp
33 dev ovirtmgmt port vnet0 grp ff02::1:ff00:76 temp
34 dev ovirtmgmt port bond0.86 grp ff02::16 temp
35 dev ovirtmgmt port vnet1 grp ff02::1:ff00:77 temp
36 dev ovirtmgmt port bond0.86 grp ff02::1:ff00:def temp
37 dev ovirtmgmt port bond0.86 grp ff02::1:ffa1:40bf temp
38
39 Fixes: 08b202b67264 ("bridge br_multicast: IPv6 MLD support.")
40 Reported-by: Rik Theys <Rik.Theys@esat.kuleuven.be>
41 Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>
42 Tested-by: Rik Theys <Rik.Theys@esat.kuleuven.be>
43 Signed-off-by: David S. Miller <davem@davemloft.net>
44 ---
45 net/bridge/br_multicast.c | 2 +-
46 1 file changed, 1 insertion(+), 1 deletion(-)
47
48 --- a/net/bridge/br_multicast.c
49 +++ b/net/bridge/br_multicast.c
50 @@ -1071,7 +1071,7 @@ static int br_ip6_multicast_mld2_report(
51
52 err = br_ip6_multicast_add_group(br, port, &grec->grec_mca,
53 vid);
54 - if (!err)
55 + if (err)
56 break;
57 }
58