• Jakub Kicinski's avatar
    ip6_tunnel: fix GRE6 segmentation · a6e3f298
    Jakub Kicinski authored
    Commit 6c11fbf9 ("ip6_tunnel: add MPLS transmit support")
    moved assiging inner_ipproto down from ipxip6_tnl_xmit() to
    its callee ip6_tnl_xmit(). The latter is also used by GRE.
    
    Since commit 38720352 ("gre: Use inner_proto to obtain inner
    header protocol") GRE had been depending on skb->inner_protocol
    during segmentation. It sets it in gre_build_header() and reads
    it in gre_gso_segment(). Changes to ip6_tnl_xmit() overwrite
    the protocol, resulting in GSO skbs getting dropped.
    
    Note that inner_protocol is a union with inner_ipproto,
    GRE uses the former while the change switched it to the latter
    (always setting it to just IPPROTO_GRE).
    
    Restore the original location of skb_set_inner_ipproto(),
    it is unclear why it was moved in the first place.
    
    Fixes: 6c11fbf9 ("ip6_tunnel: add MPLS transmit support")
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    Tested-by: default avatarVadim Fedorenko <vfedorenko@novek.ru>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    a6e3f298
ip6_tunnel.c 57.7 KB