diff options
Diffstat (limited to 'net/ipv6/esp6.c')
-rw-r--r-- | net/ipv6/esp6.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/net/ipv6/esp6.c b/net/ipv6/esp6.c index 7fdf84dee73f..b8e8914cc002 100644 --- a/net/ipv6/esp6.c +++ b/net/ipv6/esp6.c | |||
@@ -51,6 +51,7 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb) | |||
51 | int clen; | 51 | int clen; |
52 | int alen; | 52 | int alen; |
53 | int nfrags; | 53 | int nfrags; |
54 | u8 *tail; | ||
54 | struct esp_data *esp = x->data; | 55 | struct esp_data *esp = x->data; |
55 | int hdr_len = (skb_transport_offset(skb) + | 56 | int hdr_len = (skb_transport_offset(skb) + |
56 | sizeof(*esph) + esp->conf.ivlen); | 57 | sizeof(*esph) + esp->conf.ivlen); |
@@ -78,18 +79,19 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb) | |||
78 | } | 79 | } |
79 | 80 | ||
80 | /* Fill padding... */ | 81 | /* Fill padding... */ |
82 | tail = skb_tail_pointer(trailer); | ||
81 | do { | 83 | do { |
82 | int i; | 84 | int i; |
83 | for (i=0; i<clen-skb->len - 2; i++) | 85 | for (i=0; i<clen-skb->len - 2; i++) |
84 | *(u8*)(trailer->tail + i) = i+1; | 86 | tail[i] = i + 1; |
85 | } while (0); | 87 | } while (0); |
86 | *(u8*)(trailer->tail + clen-skb->len - 2) = (clen - skb->len)-2; | 88 | tail[clen-skb->len - 2] = (clen - skb->len) - 2; |
87 | pskb_put(skb, trailer, clen - skb->len); | 89 | pskb_put(skb, trailer, clen - skb->len); |
88 | 90 | ||
89 | top_iph = (struct ipv6hdr *)__skb_push(skb, hdr_len); | 91 | top_iph = (struct ipv6hdr *)__skb_push(skb, hdr_len); |
90 | esph = (struct ipv6_esp_hdr *)skb_transport_header(skb); | 92 | esph = (struct ipv6_esp_hdr *)skb_transport_header(skb); |
91 | top_iph->payload_len = htons(skb->len + alen - sizeof(*top_iph)); | 93 | top_iph->payload_len = htons(skb->len + alen - sizeof(*top_iph)); |
92 | *(u8 *)(trailer->tail - 1) = *skb_network_header(skb); | 94 | *(skb_tail_pointer(skb) - 1) = *skb_network_header(skb); |
93 | *skb_network_header(skb) = IPPROTO_ESP; | 95 | *skb_network_header(skb) = IPPROTO_ESP; |
94 | 96 | ||
95 | esph->spi = x->id.spi; | 97 | esph->spi = x->id.spi; |