-stable review patch. If anyone has any objections, please let us know.
---------------------
From: Kazunori MIYAZAWA <[email protected]>
---
net/ipv4/xfrm4_input.c | 6 ++----
net/ipv4/xfrm4_mode_tunnel.c | 2 ++
net/ipv6/xfrm6_input.c | 6 ++----
net/ipv6/xfrm6_mode_tunnel.c | 1 +
4 files changed, 7 insertions(+), 8 deletions(-)
--- linux-2.6.20.13.orig/net/ipv4/xfrm4_input.c
+++ linux-2.6.20.13/net/ipv4/xfrm4_input.c
@@ -136,10 +136,8 @@ int xfrm4_rcv_encap(struct sk_buff *skb,
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 {
--- linux-2.6.20.13.orig/net/ipv4/xfrm4_mode_tunnel.c
+++ linux-2.6.20.13/net/ipv4/xfrm4_mode_tunnel.c
@@ -66,6 +66,8 @@ static int xfrm4_tunnel_output(struct xf
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;
}
--- linux-2.6.20.13.orig/net/ipv6/xfrm6_input.c
+++ linux-2.6.20.13/net/ipv6/xfrm6_input.c
@@ -103,10 +103,8 @@ int xfrm6_rcv_spi(struct sk_buff *skb, _
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 {
--- linux-2.6.20.13.orig/net/ipv6/xfrm6_mode_tunnel.c
+++ linux-2.6.20.13/net/ipv6/xfrm6_mode_tunnel.c
@@ -65,6 +65,7 @@ static int xfrm6_tunnel_output(struct xf
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;
}
--