• Yossi Kuperman's avatar
    esp6: Fix RX checksum after header pull · a9b28c2b
    Yossi Kuperman authored
    Both ip6_input_finish (non-GRO) and esp6_gro_receive (GRO) strip
    the IPv6 header without adjusting skb->csum accordingly. As a
    result CHECKSUM_COMPLETE breaks and "hw csum failure" is written
    to the kernel log by netdev_rx_csum_fault (dev.c).
    
    Fix skb->csum by substracting the checksum value of the pulled IPv6
    header using a call to skb_postpull_rcsum.
    
    This affects both transport and tunnel modes.
    
    Note that the fix occurs far from the place that the header was
    pulled. This is based on existing code, see:
    ipv6_srh_rcv() in exthdrs.c and rawv6_rcv() in raw.c
    Signed-off-by: default avatarYossi Kuperman <yossiku@mellanox.com>
    Signed-off-by: default avatarIlan Tayari <ilant@mellanox.com>
    Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
    a9b28c2b
esp6.c 21.3 KB