diff options
author | Tom Herbert <therbert@google.com> | 2014-05-07 16:52:29 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-05-08 23:47:50 -0400 |
commit | 39471ac8dde690bf944248e06bec32a4568cdd45 (patch) | |
tree | e6fb6ac43f69e05951b251a80ffb9f1e92ea302d /net/ipv6 | |
parent | 29a96e1f36dbd6fc7911a6d517625c656ba4809f (diff) |
icmp6: Call skb_checksum_validate
Use skb_checksum_validate to verify checksum.
Signed-off-by: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/icmp.c | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index 3b0905b7712..8d3952796d3 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c @@ -692,22 +692,11 @@ static int icmpv6_rcv(struct sk_buff *skb) saddr = &ipv6_hdr(skb)->saddr; daddr = &ipv6_hdr(skb)->daddr; - /* Perform checksum. */ - switch (skb->ip_summed) { - case CHECKSUM_COMPLETE: - if (!csum_ipv6_magic(saddr, daddr, skb->len, IPPROTO_ICMPV6, - skb->csum)) - break; - /* fall through */ - case CHECKSUM_NONE: - skb->csum = ~csum_unfold(csum_ipv6_magic(saddr, daddr, skb->len, - IPPROTO_ICMPV6, 0)); - if (__skb_checksum_complete(skb)) { - LIMIT_NETDEBUG(KERN_DEBUG - "ICMPv6 checksum failed [%pI6c > %pI6c]\n", - saddr, daddr); - goto csum_error; - } + if (skb_checksum_validate(skb, IPPROTO_ICMPV6, ip6_compute_pseudo)) { + LIMIT_NETDEBUG(KERN_DEBUG + "ICMPv6 checksum failed [%pI6c > %pI6c]\n", + saddr, daddr); + goto csum_error; } if (!pskb_pull(skb, sizeof(*hdr))) |