Fixes kernel bugzilla 10437
Based almost entirely upon a patch by Dmitry Butskoy.
When deciding what raw sockets to deliver the ICMPv6
to, we should use the addresses in the ICMPv6 quoted
IPV6 header, not the top-level one.
Signed-off-by: David S. Miller <davem@davemloft.net>
        read_lock(&raw_v6_hashinfo.lock);
        sk = sk_head(&raw_v6_hashinfo.ht[hash]);
        if (sk != NULL) {
-               saddr = &ipv6_hdr(skb)->saddr;
-               daddr = &ipv6_hdr(skb)->daddr;
+               struct ipv6hdr *hdr = (struct ipv6hdr *) skb->data;
+
+               saddr = &hdr->saddr;
+               daddr = &hdr->daddr;
                net = skb->dev->nd_net;
 
                while ((sk = __raw_v6_lookup(net, sk, nexthdr, saddr, daddr,