[PATCH] net/vhost: fix SW checksum when zero
Morten Brørup
mb at smartsharesystems.com
Sat Oct 17 18:59:52 CEST 2026
Identifying UDP packets by masking the packet type with the L4 UDP packet
type value (0x00000200) also matched other L4 packet types with that bit
set; specifically IP fragments, IGMP packets, and certain non-fragments.
This meant that non-UDP packets followed the special UDP rule about
transmitting a checksum of zero as 0xffff instead.
Updated to mask the packet type with the L4 packet type mask and then
compare to the L4 UDP packet type, so only UDP packets follow the special
UDP checksum rule.
Fixes: 8ba1723783b2 ("net/vhost: perform SW checksum in Tx path")
Fixes: 8f1750f42e2d ("net/vhost: perform SW checksum in Rx path")
Cc: stable at dpdk.org
Signed-off-by: Morten Brørup <mb at smartsharesystems.com>
---
drivers/net/vhost/rte_eth_vhost.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
index f6ef997455..1f55ee9670 100644
--- a/drivers/net/vhost/rte_eth_vhost.c
+++ b/drivers/net/vhost/rte_eth_vhost.c
@@ -346,7 +346,7 @@ vhost_dev_tx_sw_csum(struct rte_mbuf *mbuf)
csum = ~csum;
/* See RFC768 */
- if (unlikely((mbuf->packet_type & RTE_PTYPE_L4_UDP) && csum == 0))
+ if (unlikely(csum == 0) && (mbuf->packet_type & RTE_PTYPE_L4_MASK) == RTE_PTYPE_L4_UDP)
csum = 0xffff;
if (rte_pktmbuf_data_len(mbuf) >= csum_offset + 1)
@@ -389,7 +389,7 @@ vhost_dev_rx_sw_csum(struct rte_mbuf *mbuf)
csum = ~csum;
/* See RFC768 */
- if (unlikely((ptype & RTE_PTYPE_L4_UDP) && csum == 0))
+ if (unlikely(csum == 0) && (ptype & RTE_PTYPE_L4_MASK) == RTE_PTYPE_L4_UDP)
csum = 0xffff;
if (rte_pktmbuf_data_len(mbuf) >= csum_offset + 1)
--
2.43.0
More information about the dev
mailing list