diff options
Diffstat (limited to 'net/ipv6/xfrm6_mode_transport.c')
-rw-r--r-- | net/ipv6/xfrm6_mode_transport.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/ipv6/xfrm6_mode_transport.c b/net/ipv6/xfrm6_mode_transport.c index 3a4b39b12bad..ace0bbf4f25d 100644 --- a/net/ipv6/xfrm6_mode_transport.c +++ b/net/ipv6/xfrm6_mode_transport.c | |||
@@ -53,8 +53,10 @@ static int xfrm6_transport_input(struct xfrm_state *x, struct sk_buff *skb) | |||
53 | { | 53 | { |
54 | int ihl = skb->data - skb->h.raw; | 54 | int ihl = skb->data - skb->h.raw; |
55 | 55 | ||
56 | if (skb->h.raw != skb->nh.raw) | 56 | if (skb->h.raw != skb->nh.raw) { |
57 | skb->nh.raw = memmove(skb->h.raw, skb->nh.raw, ihl); | 57 | memmove(skb->h.raw, skb_network_header(skb), ihl); |
58 | skb->nh.raw = skb->h.raw; | ||
59 | } | ||
58 | skb->nh.ipv6h->payload_len = htons(skb->len + ihl - | 60 | skb->nh.ipv6h->payload_len = htons(skb->len + ihl - |
59 | sizeof(struct ipv6hdr)); | 61 | sizeof(struct ipv6hdr)); |
60 | skb->h.raw = skb->data; | 62 | skb->h.raw = skb->data; |