diff options
Diffstat (limited to 'net/ipv4/esp4.c')
-rw-r--r-- | net/ipv4/esp4.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c index 31041127eeb8..222d21e5bbeb 100644 --- a/net/ipv4/esp4.c +++ b/net/ipv4/esp4.c | |||
@@ -57,9 +57,10 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb) | |||
57 | *(u8*)(trailer->tail + clen-skb->len - 2) = (clen - skb->len)-2; | 57 | *(u8*)(trailer->tail + clen-skb->len - 2) = (clen - skb->len)-2; |
58 | pskb_put(skb, trailer, clen - skb->len); | 58 | pskb_put(skb, trailer, clen - skb->len); |
59 | 59 | ||
60 | __skb_push(skb, skb->data - skb->nh.raw); | 60 | __skb_push(skb, skb->data - skb_network_header(skb)); |
61 | top_iph = skb->nh.iph; | 61 | top_iph = skb->nh.iph; |
62 | esph = (struct ip_esp_hdr *)(skb->nh.raw + top_iph->ihl*4); | 62 | esph = (struct ip_esp_hdr *)(skb_network_header(skb) + |
63 | top_iph->ihl * 4); | ||
63 | top_iph->tot_len = htons(skb->len + alen); | 64 | top_iph->tot_len = htons(skb->len + alen); |
64 | *(u8*)(trailer->tail - 1) = top_iph->protocol; | 65 | *(u8*)(trailer->tail - 1) = top_iph->protocol; |
65 | 66 | ||
@@ -222,7 +223,7 @@ static int esp_input(struct xfrm_state *x, struct sk_buff *skb) | |||
222 | 223 | ||
223 | if (x->encap) { | 224 | if (x->encap) { |
224 | struct xfrm_encap_tmpl *encap = x->encap; | 225 | struct xfrm_encap_tmpl *encap = x->encap; |
225 | struct udphdr *uh = (void *)(skb->nh.raw + ihl); | 226 | struct udphdr *uh = (void *)(skb_network_header(skb) + ihl); |
226 | 227 | ||
227 | /* | 228 | /* |
228 | * 1) if the NAT-T peer's IP or port changed then | 229 | * 1) if the NAT-T peer's IP or port changed then |