]> Pileus Git - ~andy/linux/blobdiff - net/ipv6/ip6_input.c
Merge branch 'topic/misc' into for-linus
[~andy/linux] / net / ipv6 / ip6_input.c
index 027c7ff6f1e5370bc0e84d8e3daeb996875a431c..a46c64eb0a660b47b132e4b2346e1c112cc05759 100644 (file)
@@ -111,6 +111,14 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
            ipv6_addr_loopback(&hdr->daddr))
                goto err;
 
+       /*
+        * RFC4291 2.7
+        * Multicast addresses must not be used as source addresses in IPv6
+        * packets or appear in any Routing header.
+        */
+       if (ipv6_addr_is_multicast(&hdr->saddr))
+               goto err;
+
        skb->transport_header = skb->network_header + sizeof(*hdr);
        IP6CB(skb)->nhoff = offsetof(struct ipv6hdr, nexthdr);