|
@@ -977,10 +977,13 @@ 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) && skb->sp &&
|
|
|
- skb->sp->xvec[skb->sp->len - 1]->props.flags & XFRM_STATE_ICMP) {
|
|
|
+ if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) {
|
|
|
int nh;
|
|
|
|
|
|
+ if (!(skb->sp && skb->sp->xvec[skb->sp->len - 1]->props.flags &
|
|
|
+ XFRM_STATE_ICMP))
|
|
|
+ goto drop;
|
|
|
+
|
|
|
if (!pskb_may_pull(skb, sizeof(*icmph) + sizeof(struct iphdr)))
|
|
|
goto drop;
|
|
|
|