Transport mode xfrm_gro

2 messages, 1 author, 2017-12-06 · open the first message on its own page

Transport mode xfrm_gro

From: Herbert Xu <herbert@gondor.apana.org.au>
Date: 2017-12-06 03:37:23

Hi Steffen:

I'm looking at the function xfrm_input near the end where it deals
with transport mode packets:

		err = x->inner_mode->afinfo->transport_finish(skb, xfrm_gro || async);
		if (xfrm_gro) {
			if (skb->sp)
				skb->sp->olen = 0;
			skb_dst_drop(skb);
			gro_cells_receive(&gro_cells, skb);
			return err;
		}

This looks wrong because in transport mode, transport_finish is
well within its rights to consume and free the skb.  For example,
IPv4 transport_finish eventually calls xfrm4_rcv_encap_finish which
does:

	if (!skb_dst(skb)) {
		const struct iphdr *iph = ip_hdr(skb);

		if (ip_route_input_noref(skb, iph->daddr, iph->saddr,
					 iph->tos, skb->dev))
			goto drop;
	}
	return dst_input(skb);
drop:
	kfree_skb(skb);
	return NET_RX_DROP;

Whichever path it takes the skb is either gone or belongs to someone
else.

So why is xfrm_input in the xfrm_gro case trying to reinject the
skb into the network stack?

Cheers,
-- 
Email: Herbert Xu [off-list ref]
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

Re: Transport mode xfrm_gro

From: Herbert Xu <herbert@gondor.apana.org.au>
Date: 2017-12-06 04:06:23

On Wed, Dec 06, 2017 at 02:37:17PM +1100, Herbert Xu wrote:
So why is xfrm_input in the xfrm_gro case trying to reinject the
skb into the network stack?
Nevermind, I see now that transport_finish has code to skip xfrm_gro
packets.

Cheers,
-- 
Email: Herbert Xu [off-list ref]
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help