From 945e1f2654f32408f53245224405167754d0b4e6 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Tue, 5 May 2026 14:44:42 +0200 Subject: [PATCH] net_util: queue_pair: Handle RX short read gracefully When readv returns fewer bytes than vnet_hdr_len the frame is truncated. Report the truncated length to the guest in the used ring instead of returning a fatal InvalidVirtioNetHeader error. Signed-off-by: Anatol Belski --- net_util/src/queue_pair.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/net_util/src/queue_pair.rs b/net_util/src/queue_pair.rs index dcdc0d3d9..a37081faa 100644 --- a/net_util/src/queue_pair.rs +++ b/net_util/src/queue_pair.rs @@ -293,7 +293,15 @@ impl RxVirtio { return Err(NetQueuePairError::ReadTap(e)); } } else if (result as usize) < vnet_hdr_len() { - return Err(NetQueuePairError::InvalidVirtioNetHeader); + error!( + "net: rx: buffer too short for virtio_net_hdr ({result} < {})", + vnet_hdr_len() + ); + desc_chain + .memory() + .write_obj(0u16, num_buffers_addr) + .map_err(NetQueuePairError::GuestMemory)?; + 0 } else { // Write num_buffers to guest memory. Always 1 because the // frame is never spread over more than one descriptor chain.