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: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:
		
							parent
							
								
									f2a01517f2
								
							
						
					
					
						commit
						de3b7a06df
					
				| @ -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]; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user