diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c index b1e24446..0693ab61 100644 --- a/net/ipv4/esp4.c +++ b/net/ipv4/esp4.c @@ -222,6 +222,7 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb) int assoclen; int extralen; int tailen; + int esph_offset; __be64 seqno; __u8 proto = *skb_mac_header(skb); @@ -392,12 +393,13 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb) } cow: + esph_offset = (unsigned char *)esph - skb_transport_header(skb); err = skb_cow_data(skb, tailen, &trailer); if (err < 0) goto error; nfrags = err; tail = skb_tail_pointer(trailer); - esph = ip_esp_hdr(skb); + esph = (struct ip_esp_hdr *)(skb_transport_header(skb) + esph_offset); skip_cow: esp_output_fill_trailer(tail, tfclen, plen, proto);