Message ID | cover.1617099959.git.pabeni@redhat.com |
---|---|
Headers | show |
Series | udp: GRO L4 improvements | expand |
On Tue, Mar 30, 2021 at 6:29 AM Paolo Abeni <pabeni@redhat.com> wrote: > > When UDP packets generated locally by a socket with UDP_SEGMENT > traverse the following path: > > UDP tunnel(xmit) -> veth (segmentation) -> veth (gro) -> > UDP tunnel (rx) -> UDP socket (no UDP_GRO) > > ip_summed will be set to CHECKSUM_PARTIAL at creation time and > such checksum mode will be preserved in the above path up to the > UDP tunnel receive code where we have: > > __iptunnel_pull_header() -> skb_pull_rcsum() -> > skb_postpull_rcsum() -> __skb_postpull_rcsum() > > The latter will convert the skb to CHECKSUM_NONE. > > The UDP GSO packet will be later segmented as part of the rx socket > receive operation, and will present a CHECKSUM_NONE after segmentation. > > Additionally the segmented packets UDP CB still refers to the original > GSO packet len. Overall that causes unexpected/wrong csum validation > errors later in the UDP receive path. > > We could possibly address the issue with some additional checks and > csum mangling in the UDP tunnel code. Since the issue affects only > this UDP receive slow path, let's set a suitable csum status there. > > Note that SKB_GSO_UDP_L4 or SKB_GSO_FRAGLIST packets lacking an UDP > encapsulation present a valid checksum when landing to udp_queue_rcv_skb(), > as the UDP checksum has been validated by the GRO engine. > > v2 -> v3: > - even more verbose commit message and comments > > v1 -> v2: > - restrict the csum update to the packets strictly needing them > - hopefully clarify the commit message and code comments > > Signed-off-by: Paolo Abeni <pabeni@redhat.com> Reviewed-by: Willem de Bruijn <willemb@google.com>
Hello: This series was applied to netdev/net-next.git (refs/heads/master): On Tue, 30 Mar 2021 12:28:48 +0200 you wrote: > This series improves the UDP L4 - either 'forward' or 'frag_list' - > co-existence with UDP tunnel GRO, allowing the first to take place > correctly even for encapsulated UDP traffic. > > The first for patches are mostly bugfixes, addressing some GRO > edge-cases when both tunnels and L4 are present, enabled and in use. > > [...] Here is the summary with links: - [net-next,v3,1/8] udp: fixup csum for GSO receive slow path https://git.kernel.org/netdev/net-next/c/000ac44da7d0 - [net-next,v3,2/8] udp: skip L4 aggregation for UDP tunnel packets https://git.kernel.org/netdev/net-next/c/18f25dc39990 - [net-next,v3,3/8] udp: properly complete L4 GRO over UDP tunnel packet https://git.kernel.org/netdev/net-next/c/e0e3070a9bc9 - [net-next,v3,4/8] udp: never accept GSO_FRAGLIST packets https://git.kernel.org/netdev/net-next/c/78352f73dc50 - [net-next,v3,5/8] vxlan: allow L4 GRO passthrough https://git.kernel.org/netdev/net-next/c/d18931a92a0b - [net-next,v3,6/8] geneve: allow UDP L4 GRO passthrou https://git.kernel.org/netdev/net-next/c/61630c4f052b - [net-next,v3,7/8] bareudp: allow UDP L4 GRO passthrou https://git.kernel.org/netdev/net-next/c/b03ef676ba6d - [net-next,v3,8/8] selftests: net: add UDP GRO forwarding self-tests https://git.kernel.org/netdev/net-next/c/a062260a9d5f You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html