vmm: return all-ones for unregistered PIO reads

When reading from an unregistered PIO address, pio_read() wasn't
initialising the buffer, so guests were reading stale bytes from the
previous PIO 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 <chris@arachsys.com>
This commit is contained in:
Chris Webb
2026-05-16 14:46:07 +00:00
committed by Rob Bradford
parent 4091e965b8
commit 7b29691932

View File

@@ -491,7 +491,8 @@ impl VmOps for VmOpsHandler {
#[cfg(target_arch = "x86_64")]
fn pio_read(&self, port: u64, data: &mut [u8]) -> result::Result<(), HypervisorVmError> {
if let Err(vm_device::BusError::MissingAddressRange) = self.io_bus.read(port, data) {
info!("Guest PIO read to unregistered address 0x{port:x}");
info!("Guest PIO read from unregistered address 0x{port:x}");
data.fill(0xff); // 0xff is sentinel value for invalid reads
}
Ok(())
}