61 lines
2.2 KiB
Diff
61 lines
2.2 KiB
Diff
From 4e18cc43f7e83714da041d69d13265605c22c50c Mon Sep 17 00:00:00 2001
|
|
From: tangbinzy <tangbin_yewu@cmss.chinamobile.com>
|
|
Date: Fri, 24 Mar 2023 07:28:57 +0000
|
|
Subject: [PATCH] net/eth: Don't consider ESP to be an IPv6 option header
|
|
mainline inclusion commit 9d6267b240c114d1a3cd314a08fd6e1339d34b83 category:
|
|
bugfix
|
|
|
|
---------------------------------------------------------------
|
|
|
|
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: 75020a702151 ("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: Thomas Jansen <mithi@mithi.net>
|
|
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
|
|
|
Signed-off-by: tangbinzy <tangbin_yewu@cmss.chinamobile.com>
|
|
---
|
|
net/eth.c | 1 -
|
|
1 file changed, 1 deletion(-)
|
|
|
|
diff --git a/net/eth.c b/net/eth.c
|
|
index fe876d1a55..f074b2f9f3 100644
|
|
--- a/net/eth.c
|
|
+++ b/net/eth.c
|
|
@@ -389,7 +389,6 @@ eth_is_ip6_extension_header_type(uint8_t hdr_type)
|
|
case IP6_HOP_BY_HOP:
|
|
case IP6_ROUTING:
|
|
case IP6_FRAGMENT:
|
|
- case IP6_ESP:
|
|
case IP6_AUTHENTICATION:
|
|
case IP6_DESTINATON:
|
|
case IP6_MOBILITY:
|
|
--
|
|
2.27.0
|
|
|