]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
xfrm6: Fix transport header offset in _decode_session6.
authorSteffen Klassert <steffen.klassert@secunet.com>
Thu, 4 Dec 2014 08:46:20 +0000 (09:46 +0100)
committerSteffen Klassert <steffen.klassert@secunet.com>
Mon, 8 Dec 2014 06:38:14 +0000 (07:38 +0100)
skb->transport_header might not be valid when we do a reverse
decode because the ipv6 tunnel error handlers don't update it
to the inner transport header. This leads to a wrong offset
calculation and to wrong layer 4 informations. We fix this
by using the size of the ipv6 header as the first offset.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
net/ipv6/xfrm6_policy.c

index 5f983644373a230890b25189865af73f5e2b3b44..aa48302f00a1887448220f143b3ce96ecfb7f6d5 100644 (file)
@@ -130,8 +130,8 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
 {
        struct flowi6 *fl6 = &fl->u.ip6;
        int onlyproto = 0;
-       u16 offset = skb_network_header_len(skb);
        const struct ipv6hdr *hdr = ipv6_hdr(skb);
+       u16 offset = sizeof(*hdr);
        struct ipv6_opt_hdr *exthdr;
        const unsigned char *nh = skb_network_header(skb);
        u8 nexthdr = nh[IP6CB(skb)->nhoff];