Message ID | 20220929051357.3497325-2-steffen.klassert@secunet.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 26dbd66eab8080be51759e48280da04015221e22 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [1/3] esp: choose the correct inner protocol for GSO on inter address family tunnels | expand |
Hello: This series was applied to netdev/net.git (master) by Steffen Klassert <steffen.klassert@secunet.com>: On Thu, 29 Sep 2022 07:13:55 +0200 you wrote: > From: Sabrina Dubroca <sd@queasysnail.net> > > Commit 23c7f8d7989e ("net: Fix esp GSO on inter address family > tunnels.") is incomplete. It passes to skb_eth_gso_segment the > protocol for the outer IP version, instead of the inner IP version, so > we end up calling inet_gso_segment on an inner IPv6 packet and > ipv6_gso_segment on an inner IPv4 packet and the packets are dropped. > > [...] Here is the summary with links: - [1/3] esp: choose the correct inner protocol for GSO on inter address family tunnels https://git.kernel.org/netdev/net/c/26dbd66eab80 - [2/3] xfrm: Update ipcomp_scratches with NULL when freed https://git.kernel.org/netdev/net/c/8a04d2fc700f - [3/3] xfrm: Reinject transport-mode packets through workqueue https://git.kernel.org/netdev/net/c/4f4920669d21 You are awesome, thank you!
diff --git a/net/ipv4/esp4_offload.c b/net/ipv4/esp4_offload.c index 935026f4c807..170152772d33 100644 --- a/net/ipv4/esp4_offload.c +++ b/net/ipv4/esp4_offload.c @@ -110,7 +110,10 @@ static struct sk_buff *xfrm4_tunnel_gso_segment(struct xfrm_state *x, struct sk_buff *skb, netdev_features_t features) { - return skb_eth_gso_segment(skb, features, htons(ETH_P_IP)); + __be16 type = x->inner_mode.family == AF_INET6 ? htons(ETH_P_IPV6) + : htons(ETH_P_IP); + + return skb_eth_gso_segment(skb, features, type); } static struct sk_buff *xfrm4_transport_gso_segment(struct xfrm_state *x, diff --git a/net/ipv6/esp6_offload.c b/net/ipv6/esp6_offload.c index 3a293838a91d..79d43548279c 100644 --- a/net/ipv6/esp6_offload.c +++ b/net/ipv6/esp6_offload.c @@ -145,7 +145,10 @@ static struct sk_buff *xfrm6_tunnel_gso_segment(struct xfrm_state *x, struct sk_buff *skb, netdev_features_t features) { - return skb_eth_gso_segment(skb, features, htons(ETH_P_IPV6)); + __be16 type = x->inner_mode.family == AF_INET ? htons(ETH_P_IP) + : htons(ETH_P_IPV6); + + return skb_eth_gso_segment(skb, features, type); } static struct sk_buff *xfrm6_transport_gso_segment(struct xfrm_state *x,