From: Herbert Xu The policy check I added for ICMP on IPv6 is reversed. This patch fixes that. It also adds an skb->sp check so that unprotected packets that fail the policy check do not crash the machine. Signed-off-by: Herbert Xu Signed-off-by: Andrew Morton --- net/ipv4/icmp.c | 2 +- net/ipv6/icmp.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff -puN net/ipv4/icmp.c~ipsec-fix-reversed-icmp6-policy-check net/ipv4/icmp.c --- a/net/ipv4/icmp.c~ipsec-fix-reversed-icmp6-policy-check +++ a/net/ipv4/icmp.c @@ -978,7 +978,7 @@ int icmp_rcv(struct sk_buff *skb) struct icmphdr *icmph; struct rtable *rt = (struct rtable *)skb->dst; - if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb) && + if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb) && skb->sp && skb->sp->xvec[skb->sp->len - 1]->props.flags & XFRM_STATE_ICMP) { int nh; diff -puN net/ipv6/icmp.c~ipsec-fix-reversed-icmp6-policy-check net/ipv6/icmp.c --- a/net/ipv6/icmp.c~ipsec-fix-reversed-icmp6-policy-check +++ a/net/ipv6/icmp.c @@ -646,7 +646,7 @@ static int icmpv6_rcv(struct sk_buff *sk struct icmp6hdr *hdr; int type; - if (xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb) && + if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb) && skb->sp && skb->sp->xvec[skb->sp->len - 1]->props.flags & XFRM_STATE_ICMP) { int nh; _