From 4091e965b850133e90e674dadffed65ef287e975 Mon Sep 17 00:00:00 2001 From: Chris Webb Date: Sat, 16 May 2026 14:46:07 +0000 Subject: [PATCH] vmm: return all-ones for unregistered MMIO reads When reading from an unregistered MMIO address, mmio_read() wasn't initialising the buffer, so guests were reading stale bytes from the previous MMIO transaction rather than all 0xff bytes like master abort on real hardware. Fill data with 0xff on invalid reads. Correct 'read to unregistered address' info message to 'read from unregistered address' while we're touching this block. Signed-off-by: Chris Webb --- vmm/src/vm.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vmm/src/vm.rs b/vmm/src/vm.rs index 1c3baf865..3d88f3587 100644 --- a/vmm/src/vm.rs +++ b/vmm/src/vm.rs @@ -467,7 +467,8 @@ impl VmOps for VmOpsHandler { fn mmio_read(&self, gpa: u64, data: &mut [u8]) -> result::Result<(), HypervisorVmError> { if let Err(vm_device::BusError::MissingAddressRange) = self.mmio_bus.read(gpa, data) { - info!("Guest MMIO read to unregistered address 0x{gpa:x}"); + info!("Guest MMIO read from unregistered address 0x{gpa:x}"); + data.fill(0xff); // 0xff is sentinel value for invalid reads } Ok(()) }