diff options
Diffstat (limited to 'net/ipv6/xfrm6_output.c')
-rw-r--r-- | net/ipv6/xfrm6_output.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c index f21596f89984..4618c18e611d 100644 --- a/net/ipv6/xfrm6_output.c +++ b/net/ipv6/xfrm6_output.c | |||
@@ -47,6 +47,7 @@ static inline int xfrm6_output_one(struct sk_buff *skb) | |||
47 | { | 47 | { |
48 | struct dst_entry *dst = skb->dst; | 48 | struct dst_entry *dst = skb->dst; |
49 | struct xfrm_state *x = dst->xfrm; | 49 | struct xfrm_state *x = dst->xfrm; |
50 | struct ipv6hdr *iph; | ||
50 | int err; | 51 | int err; |
51 | 52 | ||
52 | if (x->props.mode == XFRM_MODE_TUNNEL) { | 53 | if (x->props.mode == XFRM_MODE_TUNNEL) { |
@@ -59,6 +60,9 @@ static inline int xfrm6_output_one(struct sk_buff *skb) | |||
59 | if (err) | 60 | if (err) |
60 | goto error_nolock; | 61 | goto error_nolock; |
61 | 62 | ||
63 | iph = ipv6_hdr(skb); | ||
64 | iph->payload_len = htons(skb->len - sizeof(*iph)); | ||
65 | |||
62 | IP6CB(skb)->flags |= IP6SKB_XFRM_TRANSFORMED; | 66 | IP6CB(skb)->flags |= IP6SKB_XFRM_TRANSFORMED; |
63 | err = 0; | 67 | err = 0; |
64 | 68 | ||