Merge remote-tracking branch 'lsk/v3.10/topic/thp' into linux-linaro-lsk
[firefly-linux-kernel-4.4.55.git] / net / bridge / br_multicast.c
index 2a180a380181c87cb823f213effe3d704b4c85df..81de0106528b72be4efb6904d624ee287e5aea7d 100644 (file)
@@ -1176,6 +1176,12 @@ static int br_ip6_multicast_query(struct net_bridge *br,
 
        br_multicast_query_received(br, port, !ipv6_addr_any(&ip6h->saddr));
 
+       /* RFC2710+RFC3810 (MLDv1+MLDv2) require link-local source addresses */
+       if (!(ipv6_addr_type(&ip6h->saddr) & IPV6_ADDR_LINKLOCAL)) {
+               err = -EINVAL;
+               goto out;
+       }
+
        if (skb->len == sizeof(*mld)) {
                if (!pskb_may_pull(skb, sizeof(*mld))) {
                        err = -EINVAL;