Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit de3b7a06 authored by Steffen Klassert's avatar Steffen Klassert
Browse files

xfrm6: Fix transport header offset in _decode_session6.



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: default avatarSteffen Klassert <steffen.klassert@secunet.com>
parent f2a01517
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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];