Skip to content
Snippets Groups Projects
  • Thomas Jansen's avatar
    9d6267b2
    net/eth: Don't consider ESP to be an IPv6 option header · 9d6267b2
    Thomas Jansen authored
    The IPv6 option headers all have in common that they start with some
    common fields, in particular the type of the next header followed by the
    extention header length. This is used to traverse the list of the
    options. The ESP header does not follow that format, which can break the
    IPv6 option header traversal code in eth_parse_ipv6_hdr().
    
    The effect of that is that network interfaces such as vmxnet3 that use
    the following call chain
      eth_is_ip6_extension_header_type
      eth_parse_ipv6_hdr
      net_tx_pkt_parse_headers
      net_tx_pkt_parse
      vmxnet3_process_tx_queue
    to send packets from the VM out to the host will drop packets of the
    following structure:
      Ethernet-Header(IPv6-Header(ESP(encrypted data)))
    
    Note that not all types of network interfaces use the net_tx_pkt_parse
    function though, leading to inconsistent behavior regarding sending
    those packets. The e1000 network interface for example does not suffer
    from this limitation.
    
    By not considering ESP to be an IPv6 header we can allow sending those
    packets out to the host on all types of network interfaces.
    
    Fixes: 75020a70 ("Common definitions for VMWARE devices")
    Resolves: https://gitlab.com/qemu-project/qemu/-/issues/149
    Buglink: https://bugs.launchpad.net/qemu/+bug/1758091
    
    
    Signed-off-by: default avatarThomas Jansen <mithi@mithi.net>
    Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
    9d6267b2
    History
    net/eth: Don't consider ESP to be an IPv6 option header
    Thomas Jansen authored
    The IPv6 option headers all have in common that they start with some
    common fields, in particular the type of the next header followed by the
    extention header length. This is used to traverse the list of the
    options. The ESP header does not follow that format, which can break the
    IPv6 option header traversal code in eth_parse_ipv6_hdr().
    
    The effect of that is that network interfaces such as vmxnet3 that use
    the following call chain
      eth_is_ip6_extension_header_type
      eth_parse_ipv6_hdr
      net_tx_pkt_parse_headers
      net_tx_pkt_parse
      vmxnet3_process_tx_queue
    to send packets from the VM out to the host will drop packets of the
    following structure:
      Ethernet-Header(IPv6-Header(ESP(encrypted data)))
    
    Note that not all types of network interfaces use the net_tx_pkt_parse
    function though, leading to inconsistent behavior regarding sending
    those packets. The e1000 network interface for example does not suffer
    from this limitation.
    
    By not considering ESP to be an IPv6 header we can allow sending those
    packets out to the host on all types of network interfaces.
    
    Fixes: 75020a70 ("Common definitions for VMWARE devices")
    Resolves: https://gitlab.com/qemu-project/qemu/-/issues/149
    Buglink: https://bugs.launchpad.net/qemu/+bug/1758091
    
    
    Signed-off-by: default avatarThomas Jansen <mithi@mithi.net>
    Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
eth.c 16.50 KiB