mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
[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>
This commit is contained in:
parent
83f03fa5ad
commit
f282d45cb4
@ -139,10 +139,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 {
|
||||
|
@ -85,6 +85,8 @@ static int xfrm4_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
|
||||
top_iph->saddr = x->props.saddr.a4;
|
||||
top_iph->daddr = x->id.daddr.a4;
|
||||
|
||||
skb->protocol = htons(ETH_P_IP);
|
||||
|
||||
memset(&(IPCB(skb)->opt), 0, sizeof(struct ip_options));
|
||||
return 0;
|
||||
}
|
||||
|
@ -104,10 +104,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 {
|
||||
|
@ -80,6 +80,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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user