kernel_samsung_a53x/net/ipv6
Yan Zhai b3287200bf ipv6: avoid atomic fragment on GSO packets
[ Upstream commit 03d6c848bfb406e9ef6d9846d759e97beaeea113 ]

When the ipv6 stack output a GSO packet, if its gso_size is larger than
dst MTU, then all segments would be fragmented. However, it is possible
for a GSO packet to have a trailing segment with smaller actual size
than both gso_size as well as the MTU, which leads to an "atomic
fragment". Atomic fragments are considered harmful in RFC-8021. An
Existing report from APNIC also shows that atomic fragments are more
likely to be dropped even it is equivalent to a no-op [1].

Add an extra check in the GSO slow output path. For each segment from
the original over-sized packet, if it fits with the path MTU, then avoid
generating an atomic fragment.

Link: https://www.potaroo.net/presentations/2022-03-01-ipv6-frag.pdf [1]
Fixes: b210de4f8c97 ("net: ipv6: Validate GSO SKB before finish IPv6 processing")
Reported-by: David Wragg <dwragg@cloudflare.com>
Signed-off-by: Yan Zhai <yan@cloudflare.com>
Link: https://lore.kernel.org/r/90912e3503a242dca0bc36958b11ed03a2696e5e.1698156966.git.yan@cloudflare.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-11-18 11:42:50 +01:00
..
ila Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
netfilter Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
addrconf.c net: release reference to inet6_dev pointer 2024-11-08 11:25:47 +01:00
addrconf_core.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
addrlabel.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
af_inet6.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ah6.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
anycast.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
calipso.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
datagram.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
esp6.c net: ipv6: fix return value check in esp_remove_trailer 2024-11-08 11:26:10 +01:00
esp6_offload.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
exthdrs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
exthdrs_core.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
exthdrs_offload.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fib6_notifier.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fib6_rules.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fou6.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
icmp.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
inet6_connection_sock.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
inet6_hashtables.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ip6_checksum.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ip6_fib.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ip6_flowlabel.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ip6_gre.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ip6_icmp.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ip6_input.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ip6_offload.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ip6_offload.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ip6_output.c ipv6: avoid atomic fragment on GSO packets 2024-11-18 11:42:50 +01:00
ip6_tunnel.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ip6_udp_tunnel.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ip6_vti.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ip6mr.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ipcomp6.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ipv6_sockglue.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mcast.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mcast_snoop.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mip6.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ndisc.c net: change accept_ra_min_rtr_lft to affect all RA lifetimes 2024-11-08 11:25:47 +01:00
netfilter.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
output_core.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ping.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
proc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
protocol.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
raw.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
reassembly.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
route.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
rpl.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
rpl_iptunnel.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
seg6.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
seg6_hmac.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
seg6_iptunnel.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
seg6_local.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sit.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
syncookies.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sysctl_net_ipv6.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tcp_ipv6.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tcpv6_offload.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tunnel6.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
udp.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
udp_impl.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
udp_offload.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
udplite.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xfrm6_input.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xfrm6_output.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xfrm6_policy.c Revert "xfrm6: fix inet6_dev refcount underflow problem" 2024-11-17 19:38:30 +01:00
xfrm6_protocol.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xfrm6_state.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xfrm6_tunnel.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00