Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
[firefly-linux-kernel-4.4.55.git] / net / ipv6 / raw.c
index 43b0042f15f4aae7536faf4eb52064a1c785c291..ef0579d5bca6b3794007145279f8ead1626aafe3 100644 (file)
@@ -165,7 +165,7 @@ static bool ipv6_raw_deliver(struct sk_buff *skb, int nexthdr)
        saddr = &ipv6_hdr(skb)->saddr;
        daddr = saddr + 1;
 
-       hash = nexthdr & (MAX_INET_PROTOS - 1);
+       hash = nexthdr & (RAW_HTABLE_SIZE - 1);
 
        read_lock(&raw_v6_hashinfo.lock);
        sk = sk_head(&raw_v6_hashinfo.ht[hash]);
@@ -229,7 +229,7 @@ bool raw6_local_deliver(struct sk_buff *skb, int nexthdr)
 {
        struct sock *raw_sk;
 
-       raw_sk = sk_head(&raw_v6_hashinfo.ht[nexthdr & (MAX_INET_PROTOS - 1)]);
+       raw_sk = sk_head(&raw_v6_hashinfo.ht[nexthdr & (RAW_HTABLE_SIZE - 1)]);
        if (raw_sk && !ipv6_raw_deliver(skb, nexthdr))
                raw_sk = NULL;
 
@@ -332,6 +332,8 @@ static void rawv6_err(struct sock *sk, struct sk_buff *skb,
                ip6_sk_update_pmtu(skb, sk, info);
                harderr = (np->pmtudisc == IPV6_PMTUDISC_DO);
        }
+       if (type == NDISC_REDIRECT)
+               ip6_sk_redirect(skb, sk);
        if (np->recverr) {
                u8 *payload = skb->data;
                if (!inet->hdrincl)