diff options
Diffstat (limited to 'net/ipv6/ah6.c')
-rw-r--r-- | net/ipv6/ah6.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/net/ipv6/ah6.c b/net/ipv6/ah6.c index f9f689162692..67cd06613a25 100644 --- a/net/ipv6/ah6.c +++ b/net/ipv6/ah6.c | |||
@@ -344,6 +344,8 @@ static int ah6_input(struct xfrm_state *x, struct sk_buff *skb) | |||
344 | pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) | 344 | pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) |
345 | goto out; | 345 | goto out; |
346 | 346 | ||
347 | skb->ip_summed = CHECKSUM_NONE; | ||
348 | |||
347 | hdr_len = skb->data - skb_network_header(skb); | 349 | hdr_len = skb->data - skb_network_header(skb); |
348 | ah = (struct ip_auth_hdr *)skb->data; | 350 | ah = (struct ip_auth_hdr *)skb->data; |
349 | ahp = x->data; | 351 | ahp = x->data; |
@@ -475,8 +477,15 @@ static int ah6_init_state(struct xfrm_state *x) | |||
475 | 477 | ||
476 | x->props.header_len = XFRM_ALIGN8(sizeof(struct ip_auth_hdr) + | 478 | x->props.header_len = XFRM_ALIGN8(sizeof(struct ip_auth_hdr) + |
477 | ahp->icv_trunc_len); | 479 | ahp->icv_trunc_len); |
478 | if (x->props.mode == XFRM_MODE_TUNNEL) | 480 | switch (x->props.mode) { |
481 | case XFRM_MODE_BEET: | ||
482 | case XFRM_MODE_TRANSPORT: | ||
483 | break; | ||
484 | case XFRM_MODE_TUNNEL: | ||
479 | x->props.header_len += sizeof(struct ipv6hdr); | 485 | x->props.header_len += sizeof(struct ipv6hdr); |
486 | default: | ||
487 | goto error; | ||
488 | } | ||
480 | x->data = ahp; | 489 | x->data = ahp; |
481 | 490 | ||
482 | return 0; | 491 | return 0; |