• Ansis Atteka's avatar
    udp: disable inner UDP checksum offloads in IPsec case · b40c5f4f
    Ansis Atteka authored
    Otherwise, UDP checksum offloads could corrupt ESP packets by attempting
    to calculate UDP checksum when this inner UDP packet is already protected
    by IPsec.
    
    One way to reproduce this bug is to have a VM with virtio_net driver (UFO
    set to ON in the guest VM); and then encapsulate all guest's Ethernet
    frames in Geneve; and then further encrypt Geneve with IPsec.  In this
    case following symptoms are observed:
    1. If using ixgbe NIC, then it will complain with following error message:
       ixgbe 0000:01:00.1: partial checksum but l4 proto=32!
    2. Receiving IPsec stack will drop all the corrupted ESP packets and
       increase XfrmInStateProtoError counter in /proc/net/xfrm_stat.
    3. iperf UDP test from the VM with packet sizes above MTU will not work at
       all.
    4. iperf TCP test from the VM will get ridiculously low performance because.
    Signed-off-by: default avatarAnsis Atteka <aatteka@ovn.org>
    Co-authored-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b40c5f4f
udp_offload.c 10.3 KB