[PATCH net v2 0/3] ipmr: forward GSO multicast packets
flat view
WARM3d
From: Julius Bairaktaris <hidden>
Date: 2026-10-11 16:30:02
Also in:
lkml
With fraglist GRO or UDP GRO forwarding on, a routed IPv4 multicast stream arrives as GSO packets. ipmr_prepare_xmit() drops every DF aggregate larger than the MTU, and a GSO packet sent to a VIFF_TUNNEL vif is dropped during segmentation because ip_encap() sets no tunnel GSO state. Once ip_encap() sets it, a fraglist aggregate reaches skb_segment_list() with tunnel headers, which can push a frag_list member below its head. The same panic happens today with a fraglist aggregate routed into an ipip device. Patch 1 makes room for the tunnel headers in skb_segment_list(). Patch 2 sets up IPXIP4 GSO state in ip_encap(). Patch 3 lets DF GSO packets pass when their segments fit the MTU, leaving room for the outer header on tunnel vifs. Tested in netns on veth, MFC entry to a plain vif and a tunnel vif, software segmentation on egress, 4000 1316-byte datagrams per run, n=3 per arm, fraglist GRO, UDP GRO forwarding and UDP_SEGMENT, DF set and clear: - net (af32da41b032): DF aggregates dropped on both vifs (FragFails), non-DF aggregates dropped on the tunnel vif (tx_dropped); fraglist into an ipip device panics in skb_segment_list(). - v1: DF aggregates dropped on the tunnel vif (tx_dropped). - this series: all 4000 delivered on both vifs, FragFails 0, no tx drops, no panic; ipip device 4000 of 4000. Changes in v2: - Add patches 1 and 2; v1 let DF GSO packets reach ip_encap() on tunnel vifs, where they were dropped during segmentation (Sashiko). - Keep the additive MTU comparison and check mtu > encap before subtracting, so a route MTU below 20 cannot wrap (Sashiko). - v1: https://lore.kernel.org/netdev/20261010131842.2157365-1-julius@bairaktaris.de/ (local) Julius Bairaktaris (3): net: make room for the tunnel header in skb_segment_list() ipmr: set up GSO state for tunnel vifs ipmr: do not drop GSO packets that fit the MTU after segmentation net/core/skbuff.c | 4 ++++ net/ipv4/ipmr.c | 21 ++++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) -- 2.53.0