| From foo@baz Sat Jun 13 09:48:35 PDT 2015 |
| From: Thadeu Lima de Souza Cascardo <cascardo@redhat.com> |
| Date: Fri, 22 May 2015 12:18:59 -0300 |
| Subject: bridge: fix parsing of MLDv2 reports |
| |
| From: Thadeu Lima de Souza Cascardo <cascardo@redhat.com> |
| |
| [ Upstream commit 47cc84ce0c2fe75c99ea5963c4b5704dd78ead54 ] |
| |
| When more than a multicast address is present in a MLDv2 report, all but |
| the first address is ignored, because the code breaks out of the loop if |
| there has not been an error adding that address. |
| |
| This has caused failures when two guests connected through the bridge |
| tried to communicate using IPv6. Neighbor discoveries would not be |
| transmitted to the other guest when both used a link-local address and a |
| static address. |
| |
| This only happens when there is a MLDv2 querier in the network. |
| |
| The fix will only break out of the loop when there is a failure adding a |
| multicast address. |
| |
| The mdb before the patch: |
| |
| dev ovirtmgmt port vnet0 grp ff02::1:ff7d:6603 temp |
| dev ovirtmgmt port vnet1 grp ff02::1:ff7d:6604 temp |
| dev ovirtmgmt port bond0.86 grp ff02::2 temp |
| |
| After the patch: |
| |
| dev ovirtmgmt port vnet0 grp ff02::1:ff7d:6603 temp |
| dev ovirtmgmt port vnet1 grp ff02::1:ff7d:6604 temp |
| dev ovirtmgmt port bond0.86 grp ff02::fb temp |
| dev ovirtmgmt port bond0.86 grp ff02::2 temp |
| dev ovirtmgmt port bond0.86 grp ff02::d temp |
| dev ovirtmgmt port vnet0 grp ff02::1:ff00:76 temp |
| dev ovirtmgmt port bond0.86 grp ff02::16 temp |
| dev ovirtmgmt port vnet1 grp ff02::1:ff00:77 temp |
| dev ovirtmgmt port bond0.86 grp ff02::1:ff00:def temp |
| dev ovirtmgmt port bond0.86 grp ff02::1:ffa1:40bf temp |
| |
| Fixes: 08b202b67264 ("bridge br_multicast: IPv6 MLD support.") |
| Reported-by: Rik Theys <Rik.Theys@esat.kuleuven.be> |
| Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com> |
| Tested-by: Rik Theys <Rik.Theys@esat.kuleuven.be> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/bridge/br_multicast.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/net/bridge/br_multicast.c |
| +++ b/net/bridge/br_multicast.c |
| @@ -1071,7 +1071,7 @@ static int br_ip6_multicast_mld2_report( |
| |
| err = br_ip6_multicast_add_group(br, port, &grec->grec_mca, |
| vid); |
| - if (!err) |
| + if (err) |
| break; |
| } |
| |