From ce74caa6c23669bf604d11feaaf89eec64a11c44 Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Wed, 6 May 2026 13:42:37 +0100 Subject: [PATCH] virtio-devices: balloon: Handle reporting queue errors gracefully Address translation or memory release errors on the free page reporting queue propagated up and killed the balloon device thread. Log a warning and skip the offending descriptor so the device continues operating. Signed-off-by: Rob Bradford Assisted-by: Claude:claude-opus-4-6 --- virtio-devices/src/balloon.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/virtio-devices/src/balloon.rs b/virtio-devices/src/balloon.rs index 4bf07474f..60c8c21c6 100644 --- a/virtio-devices/src/balloon.rs +++ b/virtio-devices/src/balloon.rs @@ -357,11 +357,21 @@ impl BalloonEpollHandler { let mut descs_len = 0; while let Some(desc) = desc_chain.next() { descs_len += desc.len(); - let addr = desc + let addr = match desc .addr() .translate_gva(self.access_platform.as_deref(), desc.len() as usize) - .map_err(|e| Error::GuestMemory(GuestMemoryError::IOError(e)))?; - Self::release_memory_range(desc_chain.memory(), addr, desc.len() as usize)?; + { + Ok(a) => a, + Err(e) => { + warn!("Failed to translate reporting descriptor address: {e}"); + continue; + } + }; + if let Err(e) = + Self::release_memory_range(desc_chain.memory(), addr, desc.len() as usize) + { + warn!("Failed to release reported memory range: {e}"); + } } self.queues[queue_index]