• N
    ice: Implement flow for IPv6 next header (extension header) · d40e0a80
    Nick Nunley 提交于
    stable inclusion
    from stable-5.10.13
    commit 35c50e69af15e1cbcfbbca4ba7c0f8ed7fb8566c
    bugzilla: 47995
    
    --------------------------------
    
    [ Upstream commit 1b0b0b58 ]
    
    This patch is based on a similar change to i40e by Slawomir Laba:
    "i40e: Implement flow for IPv6 next header (extension header)".
    
    When a packet contains an IPv6 header with next header which is
    an extension header and not a protocol one, the kernel function
    skb_transport_header called with such sk_buff will return a
    pointer to the extension header and not to the TCP one.
    
    The above explained call caused a problem with packet processing
    for skb with encapsulation for tunnel with ICE_TX_CTX_EIPT_IPV6.
    The extension header was not skipped at all.
    
    The ipv6_skip_exthdr function does check if next header of the IPV6
    header is an extension header and doesn't modify the l4_proto pointer
    if it points to a protocol header value so its safe to omit the
    comparison of exthdr and l4.hdr pointers. The ipv6_skip_exthdr can
    return value -1. This means that the skipping process failed
    and there is something wrong with the packet so it will be dropped.
    
    Fixes: a4e82a81 ("ice: Add support for tunnel offloads")
    Signed-off-by: NNick Nunley <nicholas.d.nunley@intel.com>
    Tested-by: NTony Brelinski <tonyx.brelinski@intel.com>
    Signed-off-by: NTony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: NSasha Levin <sashal@kernel.org>
    Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
    Acked-by: NXie XiuQi <xiexiuqi@huawei.com>
    d40e0a80
ice_txrx.c 70.7 KB