mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
netfilter: flowtable: reset transport header after nf_flow_encap_pop()
nf_flow_encap_pop() pulls vlan/pppoe or ip tunnel headers and resets the
network header, but leaves the transport header pointing into the removed
outer header. Reset the transport header to the inner L4 header, otherwise
later consumers (e.g. GSO segmentation) parse a bogus header.
Fixes: 4cd91f7c29 ("netfilter: flowtable: add vlan support")
Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
2edda78aa4
commit
08f7882637
|
|
@ -502,6 +502,7 @@ static int nf_flow_offload_forward(struct nf_flowtable_ctx *ctx,
|
|||
|
||||
nf_flow_encap_pop(ctx, skb, tuplehash);
|
||||
thoff -= ctx->offset;
|
||||
skb_set_transport_header(skb, thoff);
|
||||
|
||||
iph = ip_hdr(skb);
|
||||
nf_flow_nat_ip(flow, skb, thoff, dir, iph);
|
||||
|
|
@ -1097,6 +1098,7 @@ static int nf_flow_offload_ipv6_forward(struct nf_flowtable_ctx *ctx,
|
|||
flow_offload_refresh(flow_table, flow, false);
|
||||
|
||||
nf_flow_encap_pop(ctx, skb, tuplehash);
|
||||
skb_set_transport_header(skb, sizeof(*ip6h));
|
||||
|
||||
ip6h = ipv6_hdr(skb);
|
||||
nf_flow_nat_ipv6(flow, skb, dir, ip6h);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user