diff options
Diffstat (limited to 'net/ipv6/xfrm6_input.c')
-rw-r--r-- | net/ipv6/xfrm6_input.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/net/ipv6/xfrm6_input.c b/net/ipv6/xfrm6_input.c index 3b9eedf5b24a..5c006c845943 100644 --- a/net/ipv6/xfrm6_input.c +++ b/net/ipv6/xfrm6_input.c | |||
@@ -23,7 +23,6 @@ int xfrm6_extract_input(struct xfrm_state *x, struct sk_buff *skb) | |||
23 | 23 | ||
24 | int xfrm6_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi) | 24 | int xfrm6_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi) |
25 | { | 25 | { |
26 | XFRM_SPI_SKB_CB(skb)->nhoff = IP6CB(skb)->nhoff; | ||
27 | XFRM_SPI_SKB_CB(skb)->daddroff = offsetof(struct ipv6hdr, daddr); | 26 | XFRM_SPI_SKB_CB(skb)->daddroff = offsetof(struct ipv6hdr, daddr); |
28 | return xfrm_input(skb, nexthdr, spi, 0); | 27 | return xfrm_input(skb, nexthdr, spi, 0); |
29 | } | 28 | } |
@@ -31,6 +30,9 @@ EXPORT_SYMBOL(xfrm6_rcv_spi); | |||
31 | 30 | ||
32 | int xfrm6_transport_finish(struct sk_buff *skb, int async) | 31 | int xfrm6_transport_finish(struct sk_buff *skb, int async) |
33 | { | 32 | { |
33 | skb_network_header(skb)[IP6CB(skb)->nhoff] = | ||
34 | XFRM_MODE_SKB_CB(skb)->protocol; | ||
35 | |||
34 | #ifdef CONFIG_NETFILTER | 36 | #ifdef CONFIG_NETFILTER |
35 | ipv6_hdr(skb)->payload_len = htons(skb->len); | 37 | ipv6_hdr(skb)->payload_len = htons(skb->len); |
36 | __skb_push(skb, skb->data - skb_network_header(skb)); | 38 | __skb_push(skb, skb->data - skb_network_header(skb)); |