[PATCH] IPSEC: Fix panic when using inter address familiy IPsec on loopback.
Signed-off-by: Kazunori MIYAZAWA <kazunori@miyazawa.org> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Chris Wright <chrisw@sous-sol.org>
This commit is contained in:
committed by
Chris Wright
parent
4c63cc19a0
commit
01480c3901
@@ -136,10 +136,8 @@ int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type)
|
||||
nf_reset(skb);
|
||||
|
||||
if (decaps) {
|
||||
if (!(skb->dev->flags&IFF_LOOPBACK)) {
|
||||
dst_release(skb->dst);
|
||||
skb->dst = NULL;
|
||||
}
|
||||
dst_release(skb->dst);
|
||||
skb->dst = NULL;
|
||||
netif_rx(skb);
|
||||
return 0;
|
||||
} else {
|
||||
|
||||
@@ -66,6 +66,8 @@ static int xfrm4_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
|
||||
top_iph->daddr = x->id.daddr.a4;
|
||||
top_iph->protocol = IPPROTO_IPIP;
|
||||
|
||||
skb->protocol = htons(ETH_P_IP);
|
||||
|
||||
memset(&(IPCB(skb)->opt), 0, sizeof(struct ip_options));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -103,10 +103,8 @@ int xfrm6_rcv_spi(struct sk_buff *skb, __be32 spi)
|
||||
nf_reset(skb);
|
||||
|
||||
if (decaps) {
|
||||
if (!(skb->dev->flags&IFF_LOOPBACK)) {
|
||||
dst_release(skb->dst);
|
||||
skb->dst = NULL;
|
||||
}
|
||||
dst_release(skb->dst);
|
||||
skb->dst = NULL;
|
||||
netif_rx(skb);
|
||||
return -1;
|
||||
} else {
|
||||
|
||||
@@ -65,6 +65,7 @@ static int xfrm6_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
|
||||
top_iph->hop_limit = dst_metric(dst->child, RTAX_HOPLIMIT);
|
||||
ipv6_addr_copy(&top_iph->saddr, (struct in6_addr *)&x->props.saddr);
|
||||
ipv6_addr_copy(&top_iph->daddr, (struct in6_addr *)&x->id.daddr);
|
||||
skb->protocol = htons(ETH_P_IPV6);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user