From 67a661aff0523277b2487f074d6926c9473b70e8 Mon Sep 17 00:00:00 2001 From: Philipp Schuster Date: Tue, 2 Jun 2026 06:42:57 +0200 Subject: [PATCH] arch: preserve error chain for smbios On-behalf-of: SAP philipp.schuster@sap.com Signed-off-by: Philipp Schuster --- arch/src/lib.rs | 2 +- arch/src/x86_64/mod.rs | 2 +- arch/src/x86_64/smbios.rs | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/arch/src/lib.rs b/arch/src/lib.rs index 79561f098..79d5c510c 100644 --- a/arch/src/lib.rs +++ b/arch/src/lib.rs @@ -39,7 +39,7 @@ pub enum Error { #[error("The hvm_start_info structure extends past the end of guest memory")] StartInfoPastRamEnd, #[error("Error writing hvm_start_info to guest memory")] - StartInfoSetup, + StartInfoSetup(#[source] vm_memory::GuestMemoryError), #[error("Failed to compute initramfs address")] InitramfsAddress, #[error("Error writing module entry to guest memory")] diff --git a/arch/src/x86_64/mod.rs b/arch/src/x86_64/mod.rs index f0c42c55e..dc2718cee 100644 --- a/arch/src/x86_64/mod.rs +++ b/arch/src/x86_64/mod.rs @@ -1282,7 +1282,7 @@ fn configure_pvh( // Write the start_info struct to guest memory. guest_mem .write_obj(start_info, start_info_addr) - .map_err(|_| super::Error::StartInfoSetup)?; + .map_err(super::Error::StartInfoSetup)?; Ok(()) } diff --git a/arch/src/x86_64/smbios.rs b/arch/src/x86_64/smbios.rs index 02965f468..eae72247e 100644 --- a/arch/src/x86_64/smbios.rs +++ b/arch/src/x86_64/smbios.rs @@ -28,10 +28,10 @@ pub enum Error { Clear, /// Failure to write SMBIOS entrypoint structure #[error("Failure to write SMBIOS entrypoint structure")] - WriteSmbiosEp, + WriteSmbiosEp(#[source] vm_memory::GuestMemoryError), /// Failure to write additional data to memory #[error("Failure to write additional data to memory")] - WriteData, + WriteData(#[source] vm_memory::GuestMemoryError), /// Failure to parse uuid, uuid format may be error #[error("Failure to parse uuid: {1}")] ParseUuid(#[source] uuid::Error, String), @@ -207,7 +207,7 @@ fn write_and_incr( val: T, mut curptr: GuestAddress, ) -> Result { - mem.write_obj(val, curptr).map_err(|_| Error::WriteData)?; + mem.write_obj(val, curptr).map_err(Error::WriteData)?; curptr = curptr .checked_add(mem::size_of::() as u64) .ok_or(Error::NotEnoughMemory)?; @@ -449,7 +449,7 @@ pub fn setup_smbios(mem: &GuestMemoryMmap, smbios: Option<&SmbiosConfig>) -> Res }; smbios_ep.checksum = compute_checksum(&smbios_ep); mem.write_obj(smbios_ep, GuestAddress(SMBIOS_START)) - .map_err(|_| Error::WriteSmbiosEp)?; + .map_err(Error::WriteSmbiosEp)?; } Ok(curptr.unchecked_offset_from(physptr) + std::mem::size_of::() as u64) @@ -704,6 +704,6 @@ mod unit_tests { .unwrap(); let err = setup_smbios(&mem, None).unwrap_err(); - assert!(matches!(err, Error::WriteData)); + assert!(matches!(err, Error::WriteData(_))); } }