From f763d61afaef986fe152989f5b336bd8e2689230 Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Tue, 7 Apr 2026 12:13:05 -0700 Subject: [PATCH 01/15] Refactor SandboxMemoryLayout Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- src/hyperlight_common/src/mem.rs | 42 ++ .../src/hypervisor/hyperlight_vm/x86_64.rs | 2 +- src/hyperlight_host/src/mem/layout.rs | 398 +++++------------- src/hyperlight_host/src/mem/mgr.rs | 14 +- .../src/sandbox/uninitialized_evolve.rs | 2 +- 5 files changed, 161 insertions(+), 297 deletions(-) diff --git a/src/hyperlight_common/src/mem.rs b/src/hyperlight_common/src/mem.rs index fb850acc8..fea8413bd 100644 --- a/src/hyperlight_common/src/mem.rs +++ b/src/hyperlight_common/src/mem.rs @@ -28,6 +28,23 @@ pub struct GuestMemoryRegion { pub ptr: u64, } +impl GuestMemoryRegion { + /// Size of a serialized `GuestMemoryRegion` in bytes. + pub const SERIALIZED_SIZE: usize = core::mem::size_of::(); + + /// Write this region's fields in native-endian byte order to `buf`. + /// Returns `Ok(())` on success, or `Err` if `buf` is too small. + pub fn write_to(&self, buf: &mut [u8]) -> Result<(), &'static str> { + if buf.len() < Self::SERIALIZED_SIZE { + return Err("buffer too small for GuestMemoryRegion"); + } + let s = core::mem::size_of::(); + buf[..s].copy_from_slice(&self.size.to_ne_bytes()); + buf[s..s * 2].copy_from_slice(&self.ptr.to_ne_bytes()); + Ok(()) + } +} + /// Maximum length of a file mapping label (excluding null terminator). pub const FILE_MAPPING_LABEL_MAX_LEN: usize = 63; @@ -80,3 +97,28 @@ pub struct HyperlightPEB { #[cfg(feature = "nanvix-unstable")] pub file_mappings: GuestMemoryRegion, } + +impl HyperlightPEB { + /// Write the PEB fields in native-endian byte order to `buf`. + /// The buffer must be at least `size_of::()` bytes. + /// Returns `Err` if the buffer is too small. + pub fn write_to(&self, buf: &mut [u8]) -> Result<(), &'static str> { + if buf.len() < core::mem::size_of::() { + return Err("buffer too small for HyperlightPEB"); + } + let regions = [ + &self.input_stack, + &self.output_stack, + &self.init_data, + &self.guest_heap, + #[cfg(feature = "nanvix-unstable")] + &self.file_mappings, + ]; + let mut offset = 0; + for region in regions { + region.write_to(&mut buf[offset..])?; + offset += GuestMemoryRegion::SERIALIZED_SIZE; + } + Ok(()) + } +} diff --git a/src/hyperlight_host/src/hypervisor/hyperlight_vm/x86_64.rs b/src/hyperlight_host/src/hypervisor/hyperlight_vm/x86_64.rs index f06c94964..857490600 100644 --- a/src/hyperlight_host/src/hypervisor/hyperlight_vm/x86_64.rs +++ b/src/hyperlight_host/src/hypervisor/hyperlight_vm/x86_64.rs @@ -1489,7 +1489,7 @@ mod tests { let (mut hshm, gshm) = mem_mgr.build().unwrap(); - let peb_address = gshm.layout.peb_address; + let peb_address = gshm.layout.peb_address(); let stack_top_gva = hyperlight_common::layout::MAX_GVA as u64 - hyperlight_common::layout::SCRATCH_TOP_EXN_STACK_OFFSET + 1; diff --git a/src/hyperlight_host/src/mem/layout.rs b/src/hyperlight_host/src/mem/layout.rs index 26615d579..039fdb21c 100644 --- a/src/hyperlight_host/src/mem/layout.rs +++ b/src/hyperlight_host/src/mem/layout.rs @@ -60,8 +60,9 @@ limitations under the License. //! | Input Data | //! +-------------------------------------------+ (scratch size) -use std::fmt::Debug; -use std::mem::{offset_of, size_of}; +#[cfg(feature = "nanvix-unstable")] +use std::mem::offset_of; +use std::mem::size_of; use hyperlight_common::mem::{HyperlightPEB, PAGE_SIZE_USIZE}; use tracing::{Span, instrument}; @@ -213,100 +214,27 @@ impl ResolvedGpa { } } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, Debug)] pub(crate) struct SandboxMemoryLayout { - pub(super) sandbox_memory_config: SandboxConfiguration, + /// Input data buffer size (from SandboxConfiguration). + pub(crate) input_data_size: usize, + /// Output data buffer size (from SandboxConfiguration). + pub(crate) output_data_size: usize, /// The heap size of this sandbox. - pub(super) heap_size: usize, + pub(crate) heap_size: usize, + /// The size of the guest code section. + pub(crate) code_size: usize, + /// The size of the init data section (guest blob). init_data_size: usize, - - /// The following fields are offsets to the actual PEB struct fields. - /// They are used when writing the PEB struct itself - peb_offset: usize, - peb_input_data_offset: usize, - peb_output_data_offset: usize, - peb_init_data_offset: usize, - peb_heap_data_offset: usize, - #[cfg(feature = "nanvix-unstable")] - peb_file_mappings_offset: usize, - - guest_heap_buffer_offset: usize, - init_data_offset: usize, - pt_size: Option, - - // other - pub(crate) peb_address: usize, - code_size: usize, - // The offset in the sandbox memory where the code starts - guest_code_offset: usize, + /// Permission flags for the init data region. #[cfg_attr(feature = "i686-guest", allow(unused))] - pub(crate) init_data_permissions: Option, - - // The size of the scratch region in physical memory; note that - // this will appear under the top of physical memory. + init_data_permissions: Option, + /// The size of the scratch region in physical memory. scratch_size: usize, - // The guest-visible size of the snapshot region in physical - // memory. After compaction this may be smaller than the full - // snapshot blob (which also contains a PT tail that is only - // host-accessible). + /// The size of the snapshot region in physical memory. snapshot_size: usize, -} - -impl Debug for SandboxMemoryLayout { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let mut ff = f.debug_struct("SandboxMemoryLayout"); - ff.field( - "Total Memory Size", - &format_args!("{:#x}", self.get_memory_size().unwrap_or(0)), - ) - .field("Heap Size", &format_args!("{:#x}", self.heap_size)) - .field( - "Init Data Size", - &format_args!("{:#x}", self.init_data_size), - ) - .field("PEB Address", &format_args!("{:#x}", self.peb_address)) - .field("PEB Offset", &format_args!("{:#x}", self.peb_offset)) - .field("Code Size", &format_args!("{:#x}", self.code_size)) - .field( - "Input Data Offset", - &format_args!("{:#x}", self.peb_input_data_offset), - ) - .field( - "Output Data Offset", - &format_args!("{:#x}", self.peb_output_data_offset), - ) - .field( - "Init Data Offset", - &format_args!("{:#x}", self.peb_init_data_offset), - ) - .field( - "Guest Heap Offset", - &format_args!("{:#x}", self.peb_heap_data_offset), - ); - #[cfg(feature = "nanvix-unstable")] - ff.field( - "File Mappings Offset", - &format_args!("{:#x}", self.peb_file_mappings_offset), - ); - ff.field( - "Guest Heap Buffer Offset", - &format_args!("{:#x}", self.guest_heap_buffer_offset), - ) - .field( - "Init Data Offset", - &format_args!("{:#x}", self.init_data_offset), - ) - .field("PT Size", &format_args!("{:#x}", self.pt_size.unwrap_or(0))) - .field( - "Guest Code Offset", - &format_args!("{:#x}", self.guest_code_offset), - ) - .field( - "Scratch region size", - &format_args!("{:#x}", self.scratch_size), - ) - .finish() - } + /// The size of the page tables (None if not yet set). + pt_size: Option, } impl SandboxMemoryLayout { @@ -337,65 +265,19 @@ impl SandboxMemoryLayout { if scratch_size > Self::MAX_MEMORY_SIZE { return Err(MemoryRequestTooBig(scratch_size, Self::MAX_MEMORY_SIZE)); } - let min_scratch_size = hyperlight_common::layout::min_scratch_size( - cfg.get_input_data_size(), - cfg.get_output_data_size(), - ); + let input_data_size = cfg.get_input_data_size(); + let output_data_size = cfg.get_output_data_size(); + let min_scratch_size = + hyperlight_common::layout::min_scratch_size(input_data_size, output_data_size); if scratch_size < min_scratch_size { return Err(MemoryRequestTooSmall(scratch_size, min_scratch_size)); } - let guest_code_offset = 0; - // The following offsets are to the fields of the PEB struct itself! - let peb_offset = code_size.next_multiple_of(PAGE_SIZE_USIZE); - let peb_input_data_offset = peb_offset + offset_of!(HyperlightPEB, input_stack); - let peb_output_data_offset = peb_offset + offset_of!(HyperlightPEB, output_stack); - let peb_init_data_offset = peb_offset + offset_of!(HyperlightPEB, init_data); - let peb_heap_data_offset = peb_offset + offset_of!(HyperlightPEB, guest_heap); - #[cfg(feature = "nanvix-unstable")] - let peb_file_mappings_offset = peb_offset + offset_of!(HyperlightPEB, file_mappings); - - // The following offsets are the actual values that relate to memory layout, - // which are written to PEB struct - let peb_address = Self::BASE_ADDRESS + peb_offset; - // make sure heap buffer starts at 4K boundary. - // The FileMappingInfo array is stored immediately after the PEB struct. - // We statically reserve space for MAX_FILE_MAPPINGS entries so that - // the heap never overlaps the array, even when all slots are used. - // The host writes file mapping metadata here via write_file_mapping_entry; - // the guest only reads the entries. We don't know at layout time how - // many file mappings the host will register, so we reserve space for - // the maximum number. - // The heap starts at the next page boundary after this reserved area. - #[cfg(feature = "nanvix-unstable")] - let file_mappings_array_end = peb_offset - + size_of::() - + hyperlight_common::mem::MAX_FILE_MAPPINGS - * size_of::(); - #[cfg(feature = "nanvix-unstable")] - let guest_heap_buffer_offset = file_mappings_array_end.next_multiple_of(PAGE_SIZE_USIZE); - #[cfg(not(feature = "nanvix-unstable"))] - let guest_heap_buffer_offset = - (peb_offset + size_of::()).next_multiple_of(PAGE_SIZE_USIZE); - - // make sure init data starts at 4K boundary - let init_data_offset = - (guest_heap_buffer_offset + heap_size).next_multiple_of(PAGE_SIZE_USIZE); let mut ret = Self { - peb_offset, + input_data_size, + output_data_size, heap_size, - peb_input_data_offset, - peb_output_data_offset, - peb_init_data_offset, - peb_heap_data_offset, - #[cfg(feature = "nanvix-unstable")] - peb_file_mappings_offset, - sandbox_memory_config: cfg, code_size, - guest_heap_buffer_offset, - peb_address, - guest_code_offset, - init_data_offset, init_data_size, init_data_permissions, pt_size: None, @@ -406,68 +288,64 @@ impl SandboxMemoryLayout { Ok(ret) } - /// Get the offset in guest memory to the output data size - #[instrument(skip_all, parent = Span::current(), level= "Trace")] - pub(super) fn get_output_data_size_offset(&self) -> usize { - // The size field is the first field in the `OutputData` struct - self.peb_output_data_offset + /// Offset of the PEB struct within the snapshot region. + pub(crate) fn peb_offset(&self) -> usize { + self.code_size.next_multiple_of(PAGE_SIZE_USIZE) } - /// Get the offset in guest memory to the init data size - #[instrument(skip_all, parent = Span::current(), level= "Trace")] - pub(super) fn get_init_data_size_offset(&self) -> usize { - // The init data size is the first field in the `GuestMemoryRegion` struct - self.peb_init_data_offset + /// Offset of the PEB file_mappings field. + #[cfg(feature = "nanvix-unstable")] + fn peb_file_mappings_offset(&self) -> usize { + self.peb_offset() + offset_of!(HyperlightPEB, file_mappings) } - #[instrument(skip_all, parent = Span::current(), level= "Trace")] - pub(crate) fn get_scratch_size(&self) -> usize { - self.scratch_size + /// Guest physical address of the PEB. + pub(crate) fn peb_address(&self) -> usize { + Self::BASE_ADDRESS + self.peb_offset() } - /// Get the offset in guest memory to the output data pointer. - #[instrument(skip_all, parent = Span::current(), level= "Trace")] - fn get_output_data_pointer_offset(&self) -> usize { - // This field is immediately after the output data size field, - // which is a `u64`. - self.get_output_data_size_offset() + size_of::() + /// Offset of the guest heap buffer within the snapshot region. + pub(crate) fn guest_heap_buffer_offset(&self) -> usize { + #[cfg(feature = "nanvix-unstable")] + { + let file_mappings_array_end = self.peb_offset() + + size_of::() + + hyperlight_common::mem::MAX_FILE_MAPPINGS + * size_of::(); + file_mappings_array_end.next_multiple_of(PAGE_SIZE_USIZE) + } + #[cfg(not(feature = "nanvix-unstable"))] + { + (self.peb_offset() + size_of::()).next_multiple_of(PAGE_SIZE_USIZE) + } + } + + /// Offset of the init data section within the snapshot region. + pub(crate) fn init_data_offset(&self) -> usize { + (self.guest_heap_buffer_offset() + self.heap_size).next_multiple_of(PAGE_SIZE_USIZE) + } + + /// The code offset is always 0. + pub(crate) fn guest_code_offset(&self) -> usize { + 0 } - /// Get the offset in guest memory to the init data pointer. #[instrument(skip_all, parent = Span::current(), level= "Trace")] - pub(super) fn get_init_data_pointer_offset(&self) -> usize { - // The init data pointer is immediately after the init data size field, - // which is a `u64`. - self.get_init_data_size_offset() + size_of::() + pub(crate) fn get_scratch_size(&self) -> usize { + self.scratch_size } /// Get the guest virtual address of the start of output data. #[instrument(skip_all, parent = Span::current(), level= "Trace")] pub(crate) fn get_output_data_buffer_gva(&self) -> u64 { - hyperlight_common::layout::scratch_base_gva(self.scratch_size) - + self.sandbox_memory_config.get_input_data_size() as u64 + hyperlight_common::layout::scratch_base_gva(self.scratch_size) + self.input_data_size as u64 } /// Get the offset into the host scratch buffer of the start of /// the output data. #[instrument(skip_all, parent = Span::current(), level= "Trace")] pub(crate) fn get_output_data_buffer_scratch_host_offset(&self) -> usize { - self.sandbox_memory_config.get_input_data_size() - } - - /// Get the offset in guest memory to the input data size. - #[instrument(skip_all, parent = Span::current(), level= "Trace")] - pub(super) fn get_input_data_size_offset(&self) -> usize { - // The input data size is the first field in the input stack's `GuestMemoryRegion` struct - self.peb_input_data_offset - } - - /// Get the offset in guest memory to the input data pointer. - #[instrument(skip_all, parent = Span::current(), level= "Trace")] - fn get_input_data_pointer_offset(&self) -> usize { - // The input data pointer is immediately after the input - // data size field in the input data `GuestMemoryRegion` struct which is a `u64`. - self.get_input_data_size_offset() + size_of::() + self.input_data_size } /// Get the guest virtual address of the start of input data @@ -487,9 +365,8 @@ impl SandboxMemoryLayout { /// location where page tables will be eagerly copied on restore #[instrument(skip_all, parent = Span::current(), level= "Trace")] pub(crate) fn get_pt_base_scratch_offset(&self) -> usize { - (self.sandbox_memory_config.get_input_data_size() - + self.sandbox_memory_config.get_output_data_size()) - .next_multiple_of(hyperlight_common::vmem::PAGE_SIZE) + (self.input_data_size + self.output_data_size) + .next_multiple_of(hyperlight_common::vmem::PAGE_SIZE) } /// Get the base GPA to which the page tables will be eagerly @@ -507,17 +384,11 @@ impl SandboxMemoryLayout { self.get_pt_base_gpa() + self.pt_size.unwrap_or(0) as u64 } - /// Get the offset in guest memory to the heap size - #[instrument(skip_all, parent = Span::current(), level= "Trace")] - fn get_heap_size_offset(&self) -> usize { - self.peb_heap_data_offset - } - /// Get the offset in guest memory to the file_mappings count field /// (the `size` field of the `GuestMemoryRegion` in the PEB). #[cfg(feature = "nanvix-unstable")] pub(crate) fn get_file_mappings_size_offset(&self) -> usize { - self.peb_file_mappings_offset + self.peb_file_mappings_offset() } /// Get the offset in guest memory to the file_mappings pointer field. @@ -530,7 +401,7 @@ impl SandboxMemoryLayout { /// (immediately after the PEB struct, within the same page). #[cfg(feature = "nanvix-unstable")] pub(crate) fn get_file_mappings_array_offset(&self) -> usize { - self.peb_offset + size_of::() + self.peb_offset() + size_of::() } /// Get the guest address of the FileMappingInfo array. @@ -539,32 +410,24 @@ impl SandboxMemoryLayout { (Self::BASE_ADDRESS + self.get_file_mappings_array_offset()) as u64 } - /// Get the offset of the heap pointer in guest memory, - #[instrument(skip_all, parent = Span::current(), level= "Trace")] - fn get_heap_pointer_offset(&self) -> usize { - // The heap pointer is immediately after the - // heap size field in the guest heap's `GuestMemoryRegion` struct which is a `u64`. - self.get_heap_size_offset() + size_of::() - } - /// Get the total size of guest memory in `self`'s memory /// layout. #[instrument(skip_all, parent = Span::current(), level= "Trace")] fn get_unaligned_memory_size(&self) -> usize { - self.init_data_offset + self.init_data_size + self.init_data_offset() + self.init_data_size } /// get the code offset /// This is the offset in the sandbox memory where the code starts #[instrument(skip_all, parent = Span::current(), level= "Trace")] pub(crate) fn get_guest_code_offset(&self) -> usize { - self.guest_code_offset + self.guest_code_offset() } /// Get the guest address of the code section in the sandbox #[instrument(skip_all, parent = Span::current(), level= "Trace")] pub(crate) fn get_guest_code_address(&self) -> usize { - Self::BASE_ADDRESS + self.guest_code_offset + Self::BASE_ADDRESS + self.guest_code_offset() } /// Get the total size of guest memory in `self`'s memory @@ -592,8 +455,8 @@ impl SandboxMemoryLayout { #[instrument(skip_all, parent = Span::current(), level= "Trace")] pub(crate) fn set_pt_size(&mut self, size: usize) -> Result<()> { let min_fixed_scratch = hyperlight_common::layout::min_scratch_size( - self.sandbox_memory_config.get_input_data_size(), - self.sandbox_memory_config.get_output_data_size(), + self.input_data_size, + self.output_data_size, ); let min_scratch = min_fixed_scratch + size; if self.scratch_size < min_scratch { @@ -632,7 +495,7 @@ impl SandboxMemoryLayout { Code, ); - let expected_peb_offset = TryInto::::try_into(self.peb_offset)?; + let expected_peb_offset = TryInto::::try_into(self.peb_offset())?; if peb_offset != expected_peb_offset { return Err(new_error!( @@ -658,7 +521,7 @@ impl SandboxMemoryLayout { let heap_offset = builder.push_page_aligned(size_of::(), MemoryRegionFlags::READ, Peb); - let expected_heap_offset = TryInto::::try_into(self.guest_heap_buffer_offset)?; + let expected_heap_offset = TryInto::::try_into(self.guest_heap_buffer_offset())?; if heap_offset != expected_heap_offset { return Err(new_error!( @@ -682,7 +545,7 @@ impl SandboxMemoryLayout { Heap, ); - let expected_init_data_offset = TryInto::::try_into(self.init_data_offset)?; + let expected_init_data_offset = TryInto::::try_into(self.init_data_offset())?; if init_data_offset != expected_init_data_offset { return Err(new_error!( @@ -719,7 +582,7 @@ impl SandboxMemoryLayout { #[instrument(err(Debug), skip_all, parent = Span::current(), level= "Trace")] pub(crate) fn write_init_data(&self, out: &mut [u8], bytes: &[u8]) -> Result<()> { - out[self.init_data_offset..self.init_data_offset + self.init_data_size] + out[self.init_data_offset()..self.init_data_offset() + self.init_data_size] .copy_from_slice(bytes); Ok(()) } @@ -731,84 +594,43 @@ impl SandboxMemoryLayout { /// from this function. #[instrument(err(Debug), skip_all, parent = Span::current(), level= "Trace")] pub(crate) fn write_peb(&self, mem: &mut [u8]) -> Result<()> { - let guest_offset = SandboxMemoryLayout::BASE_ADDRESS; - - fn write_u64(mem: &mut [u8], offset: usize, value: u64) -> Result<()> { - if offset + 8 > mem.len() { - return Err(new_error!( - "Cannot write to offset {} in slice of len {}", - offset, - mem.len() - )); - } - mem[offset..offset + 8].copy_from_slice(&u64::to_ne_bytes(value)); - Ok(()) - } + use hyperlight_common::mem::GuestMemoryRegion; - macro_rules! get_address { - ($something:ident) => { - u64::try_from(guest_offset + self.$something)? - }; - } + let guest_base = Self::BASE_ADDRESS as u64; - // Start of setting up the PEB. The following are in the order of the PEB fields - - // Set up input buffer pointer - write_u64( - mem, - self.get_input_data_size_offset(), - self.sandbox_memory_config - .get_input_data_size() - .try_into()?, - )?; - write_u64( - mem, - self.get_input_data_pointer_offset(), - self.get_input_data_buffer_gva(), - )?; - - // Set up output buffer pointer - write_u64( - mem, - self.get_output_data_size_offset(), - self.sandbox_memory_config - .get_output_data_size() - .try_into()?, - )?; - write_u64( - mem, - self.get_output_data_pointer_offset(), - self.get_output_data_buffer_gva(), - )?; - - // Set up init data pointer - write_u64( - mem, - self.get_init_data_size_offset(), - (self.get_unaligned_memory_size() - self.init_data_offset).try_into()?, - )?; - let addr = get_address!(init_data_offset); - write_u64(mem, self.get_init_data_pointer_offset(), addr)?; - - // Set up heap buffer pointer - let addr = get_address!(guest_heap_buffer_offset); - write_u64(mem, self.get_heap_size_offset(), self.heap_size.try_into()?)?; - write_u64(mem, self.get_heap_pointer_offset(), addr)?; - - // Set up the file_mappings descriptor in the PEB. - // - The `size` field holds the number of valid FileMappingInfo - // entries currently written (initially 0 — entries are added - // later by map_file_cow / evolve). - // - The `ptr` field holds the guest address of the preallocated - // FileMappingInfo array - #[cfg(feature = "nanvix-unstable")] - write_u64(mem, self.get_file_mappings_size_offset(), 0)?; - #[cfg(feature = "nanvix-unstable")] - write_u64( - mem, - self.get_file_mappings_pointer_offset(), - self.get_file_mappings_array_gva(), - )?; + let peb = HyperlightPEB { + input_stack: GuestMemoryRegion { + size: self.input_data_size as u64, + ptr: self.get_input_data_buffer_gva(), + }, + output_stack: GuestMemoryRegion { + size: self.output_data_size as u64, + ptr: self.get_output_data_buffer_gva(), + }, + init_data: GuestMemoryRegion { + size: (self.get_unaligned_memory_size() - self.init_data_offset()) as u64, + ptr: guest_base + self.init_data_offset() as u64, + }, + guest_heap: GuestMemoryRegion { + size: self.heap_size as u64, + ptr: guest_base + self.guest_heap_buffer_offset() as u64, + }, + // Set up the file_mappings descriptor in the PEB. + // - The `size` field holds the number of valid FileMappingInfo + // entries currently written (initially 0 — entries are added + // later by map_file_cow / evolve). + // - The `ptr` field holds the guest address of the preallocated + // FileMappingInfo array + #[cfg(feature = "nanvix-unstable")] + file_mappings: GuestMemoryRegion { + size: 0, // entry count, populated later by map_file_cow + ptr: self.get_file_mappings_array_gva(), + }, + }; + + let offset = self.peb_offset(); + peb.write_to(&mut mem[offset..offset + size_of::()]) + .map_err(|e| new_error!("failed to write PEB: {}", e))?; // End of setting up the PEB diff --git a/src/hyperlight_host/src/mem/mgr.rs b/src/hyperlight_host/src/mem/mgr.rs index 68f35ff7d..9e5d843d1 100644 --- a/src/hyperlight_host/src/mem/mgr.rs +++ b/src/hyperlight_host/src/mem/mgr.rs @@ -441,7 +441,7 @@ impl SandboxMemoryManager { pub(crate) fn get_host_function_call(&mut self) -> Result { self.scratch_mem.try_pop_buffer_into::( self.layout.get_output_data_buffer_scratch_host_offset(), - self.layout.sandbox_memory_config.get_output_data_size(), + self.layout.output_data_size, ) } @@ -456,7 +456,7 @@ impl SandboxMemoryManager { self.scratch_mem.push_buffer( self.layout.get_input_data_buffer_scratch_host_offset(), - self.layout.sandbox_memory_config.get_input_data_size(), + self.layout.input_data_size, data, ) } @@ -473,7 +473,7 @@ impl SandboxMemoryManager { self.scratch_mem.push_buffer( self.layout.get_input_data_buffer_scratch_host_offset(), - self.layout.sandbox_memory_config.get_input_data_size(), + self.layout.input_data_size, buffer, )?; Ok(()) @@ -485,7 +485,7 @@ impl SandboxMemoryManager { pub(crate) fn get_guest_function_call_result(&mut self) -> Result { self.scratch_mem.try_pop_buffer_into::( self.layout.get_output_data_buffer_scratch_host_offset(), - self.layout.sandbox_memory_config.get_output_data_size(), + self.layout.output_data_size, ) } @@ -494,7 +494,7 @@ impl SandboxMemoryManager { pub(crate) fn read_guest_log_data(&mut self) -> Result { self.scratch_mem.try_pop_buffer_into::( self.layout.get_output_data_buffer_scratch_host_offset(), - self.layout.sandbox_memory_config.get_output_data_size(), + self.layout.output_data_size, ) } @@ -503,7 +503,7 @@ impl SandboxMemoryManager { loop { let Ok(_) = self.scratch_mem.try_pop_buffer_into::>( self.layout.get_output_data_buffer_scratch_host_offset(), - self.layout.sandbox_memory_config.get_output_data_size(), + self.layout.output_data_size, ) else { break; }; @@ -512,7 +512,7 @@ impl SandboxMemoryManager { loop { let Ok(_) = self.scratch_mem.try_pop_buffer_into::>( self.layout.get_input_data_buffer_scratch_host_offset(), - self.layout.sandbox_memory_config.get_input_data_size(), + self.layout.input_data_size, ) else { break; }; diff --git a/src/hyperlight_host/src/sandbox/uninitialized_evolve.rs b/src/hyperlight_host/src/sandbox/uninitialized_evolve.rs index 7f0cc1c0d..c037af06e 100644 --- a/src/hyperlight_host/src/sandbox/uninitialized_evolve.rs +++ b/src/hyperlight_host/src/sandbox/uninitialized_evolve.rs @@ -73,7 +73,7 @@ pub(super) fn evolve_impl_multi_use(u_sbox: UninitializedSandbox) -> Result() }; let peb_addr = { - let peb_u64 = u64::try_from(hshm.layout.peb_address)?; + let peb_u64 = u64::try_from(hshm.layout.peb_address())?; RawPtr::from(peb_u64) }; From d58ed12e69354682af88b333d6735d2fa77a7e76 Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Thu, 30 Apr 2026 18:48:32 -0700 Subject: [PATCH 02/15] Move sandbox snapshot.rs into snapshot module dir Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- src/hyperlight_host/src/sandbox/{snapshot.rs => snapshot/mod.rs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/hyperlight_host/src/sandbox/{snapshot.rs => snapshot/mod.rs} (100%) diff --git a/src/hyperlight_host/src/sandbox/snapshot.rs b/src/hyperlight_host/src/sandbox/snapshot/mod.rs similarity index 100% rename from src/hyperlight_host/src/sandbox/snapshot.rs rename to src/hyperlight_host/src/sandbox/snapshot/mod.rs From b60bb6fbba5bad0d20dce6f4f411534022b4f437 Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Thu, 30 Apr 2026 18:48:59 -0700 Subject: [PATCH 03/15] Remove unused get_file_mappings_pointer_offset Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- src/hyperlight_host/src/mem/layout.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/hyperlight_host/src/mem/layout.rs b/src/hyperlight_host/src/mem/layout.rs index 039fdb21c..df8a86be5 100644 --- a/src/hyperlight_host/src/mem/layout.rs +++ b/src/hyperlight_host/src/mem/layout.rs @@ -391,12 +391,6 @@ impl SandboxMemoryLayout { self.peb_file_mappings_offset() } - /// Get the offset in guest memory to the file_mappings pointer field. - #[cfg(feature = "nanvix-unstable")] - fn get_file_mappings_pointer_offset(&self) -> usize { - self.get_file_mappings_size_offset() + size_of::() - } - /// Get the offset in snapshot memory where the FileMappingInfo array starts /// (immediately after the PEB struct, within the same page). #[cfg(feature = "nanvix-unstable")] From 6f9cab99926f13bb9560074e13ac639f386a9218 Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Thu, 30 Apr 2026 18:50:22 -0700 Subject: [PATCH 04/15] Expose SandboxMemoryLayout fields to crate Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- src/hyperlight_host/src/mem/layout.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/hyperlight_host/src/mem/layout.rs b/src/hyperlight_host/src/mem/layout.rs index df8a86be5..a5bca8727 100644 --- a/src/hyperlight_host/src/mem/layout.rs +++ b/src/hyperlight_host/src/mem/layout.rs @@ -225,16 +225,16 @@ pub(crate) struct SandboxMemoryLayout { /// The size of the guest code section. pub(crate) code_size: usize, /// The size of the init data section (guest blob). - init_data_size: usize, + pub(crate) init_data_size: usize, /// Permission flags for the init data region. #[cfg_attr(feature = "i686-guest", allow(unused))] - init_data_permissions: Option, + pub(crate) init_data_permissions: Option, /// The size of the scratch region in physical memory. - scratch_size: usize, + pub(crate) scratch_size: usize, /// The size of the snapshot region in physical memory. - snapshot_size: usize, + pub(crate) snapshot_size: usize, /// The size of the page tables (None if not yet set). - pt_size: Option, + pub(crate) pt_size: Option, } impl SandboxMemoryLayout { From 8d4ffd78e1ef25923b4f055e37f03617f74256eb Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Thu, 30 Apr 2026 18:50:33 -0700 Subject: [PATCH 05/15] Extract HyperlightVm apply_sregs helper Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- .../src/hypervisor/hyperlight_vm/x86_64.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/hyperlight_host/src/hypervisor/hyperlight_vm/x86_64.rs b/src/hyperlight_host/src/hypervisor/hyperlight_vm/x86_64.rs index 857490600..16ac55ad3 100644 --- a/src/hyperlight_host/src/hypervisor/hyperlight_vm/x86_64.rs +++ b/src/hyperlight_host/src/hypervisor/hyperlight_vm/x86_64.rs @@ -346,6 +346,15 @@ impl HyperlightVm { self.vm.set_debug_regs(&CommonDebugRegs::default())?; self.vm.reset_xsave()?; + self.apply_sregs(cr3, sregs) + } + + /// Apply special registers and mark TLB for flush. + pub(crate) fn apply_sregs( + &mut self, + cr3: u64, + sregs: &CommonSpecialRegisters, + ) -> std::result::Result<(), RegisterError> { // Restore the full special registers from snapshot, but update CR3 // to point to the new (relocated) page tables let mut sregs = *sregs; From dc0d08bb29eaf65387c8753f2e534aa41495382a Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Thu, 30 Apr 2026 18:50:43 -0700 Subject: [PATCH 06/15] Introduce HostFunctions newtype for sandbox construction Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- .../src/func/host_functions.rs | 26 ++++- src/hyperlight_host/src/lib.rs | 3 + src/hyperlight_host/src/sandbox/host_funcs.rs | 99 +++++++++++++++++-- .../src/sandbox/uninitialized.rs | 9 +- 4 files changed, 118 insertions(+), 19 deletions(-) diff --git a/src/hyperlight_host/src/func/host_functions.rs b/src/hyperlight_host/src/func/host_functions.rs index e87fa70b0..9ccb98f05 100644 --- a/src/hyperlight_host/src/func/host_functions.rs +++ b/src/hyperlight_host/src/func/host_functions.rs @@ -52,7 +52,8 @@ impl Registerable for UninitializedSandbox { return_type: Output::TYPE, }; - (*hfs).register_host_function(name.to_string(), entry) + (*hfs).register_host_function(name.to_string(), entry); + Ok(()) } } @@ -92,7 +93,26 @@ impl Registerable for crate::MultiUseSandbox { return_type: Output::TYPE, }; - (*hfs).register_host_function(name.to_string(), entry) + (*hfs).register_host_function(name.to_string(), entry); + Ok(()) + } +} + +impl Registerable for crate::HostFunctions { + fn register_host_function( + &mut self, + name: &str, + hf: impl Into>, + ) -> Result<()> { + let entry = FunctionEntry { + function: hf.into().into(), + parameter_types: Args::TYPE, + return_type: Output::TYPE, + }; + + self.inner_mut() + .register_host_function(name.to_string(), entry); + Ok(()) } } @@ -236,7 +256,7 @@ pub(crate) fn register_host_function, } -impl From<&mut FunctionRegistry> for HostFunctionDetails { - fn from(registry: &mut FunctionRegistry) -> Self { +/// A collection of host functions that can be supplied to a sandbox +/// constructor (e.g. [`crate::MultiUseSandbox::from_snapshot`]) to +/// expose host-side functionality to the guest. +/// +/// Use [`HostFunctions::default`] to start with the standard +/// `HostPrint` function pre-registered (matches the registry that the +/// regular `UninitializedSandbox` → `evolve()` path constructs), or +/// [`HostFunctions::new`] to start with an empty registry. +/// +/// Add additional host functions via the +/// [`crate::func::Registerable`] trait, just as you would on an +/// `UninitializedSandbox`. +/// +/// ```no_run +/// # use hyperlight_host::{HostFunctions, Result}; +/// # use hyperlight_host::func::Registerable; +/// # fn example() -> Result<()> { +/// // Default: HostPrint already registered. +/// let mut funcs = HostFunctions::default(); +/// funcs.register_host_function("Add", |a: i32, b: i32| Ok(a + b))?; +/// # Ok(()) +/// # } +/// ``` +pub struct HostFunctions(FunctionRegistry); + +impl HostFunctions { + /// Create an empty `HostFunctions` with no host functions + /// registered. + /// + /// Most callers want [`HostFunctions::default`] instead, which + /// pre-registers the standard `HostPrint` function. + pub fn new() -> Self { + Self(FunctionRegistry::default()) + } + + /// Consume this `HostFunctions` and return the inner registry. + pub(crate) fn into_inner(self) -> FunctionRegistry { + self.0 + } + + /// Borrow the inner registry mutably. + pub(crate) fn inner_mut(&mut self) -> &mut FunctionRegistry { + &mut self.0 + } + + /// Borrow the inner registry immutably. + pub(crate) fn inner(&self) -> &FunctionRegistry { + &self.0 + } +} + +impl Default for HostFunctions { + /// Create a `HostFunctions` pre-populated with the standard + /// `HostPrint` function (writes UTF-8 strings to the host's + /// stdout in green). + /// + /// This matches the default registry installed by + /// `UninitializedSandbox::new()`, so a snapshot taken from a + /// regular sandbox can be loaded with + /// `MultiUseSandbox::from_snapshot(snap, HostFunctions::default(), None)` + /// without registering anything else. + /// + /// Use [`HostFunctions::new`] for an empty registry. + fn default() -> Self { + Self(FunctionRegistry::with_default_host_print()) + } +} + +impl From<&FunctionRegistry> for HostFunctionDetails { + fn from(registry: &FunctionRegistry) -> Self { let host_functions = registry .functions_map .iter() @@ -61,15 +129,26 @@ pub struct FunctionEntry { impl FunctionRegistry { /// Register a host function with the sandbox. - #[instrument(err(Debug), skip_all, parent = Span::current(), level = "Trace")] - pub(crate) fn register_host_function( - &mut self, - name: String, - func: FunctionEntry, - ) -> Result<()> { + #[instrument(skip_all, parent = Span::current(), level = "Trace")] + pub(crate) fn register_host_function(&mut self, name: String, func: FunctionEntry) { self.functions_map.insert(name, func); + } - Ok(()) + /// Create a `FunctionRegistry` pre-populated with the default + /// `HostPrint` function (writes to stdout with green text). + pub(crate) fn with_default_host_print() -> Self { + use crate::func::host_functions::HostFunction; + use crate::func::{ParameterTuple, SupportedReturnType}; + + let mut registry = Self::default(); + let hf: HostFunction = default_writer_func.into(); + let entry = FunctionEntry { + function: hf.into(), + parameter_types: <(String,)>::TYPE, + return_type: ::TYPE, + }; + registry.register_host_function("HostPrint".to_string(), entry); + registry } /// Assuming a host function called `"HostPrint"` exists, and takes a @@ -118,7 +197,7 @@ impl FunctionRegistry { /// The default writer function is to write to stdout with green text. #[instrument(err(Debug), skip_all, parent = Span::current(), level = "Trace")] -pub(super) fn default_writer_func(s: String) -> Result { +fn default_writer_func(s: String) -> Result { match std::io::stdout().is_terminal() { false => { print!("{}", s); diff --git a/src/hyperlight_host/src/sandbox/uninitialized.rs b/src/hyperlight_host/src/sandbox/uninitialized.rs index 23c01be28..b65b1e655 100644 --- a/src/hyperlight_host/src/sandbox/uninitialized.rs +++ b/src/hyperlight_host/src/sandbox/uninitialized.rs @@ -22,7 +22,7 @@ use std::sync::{Arc, Mutex}; use tracing::{Span, instrument}; use tracing_core::LevelFilter; -use super::host_funcs::{FunctionRegistry, default_writer_func}; +use super::host_funcs::FunctionRegistry; use super::snapshot::Snapshot; use super::uninitialized_evolve::evolve_impl_multi_use; use crate::func::host_functions::{HostFunction, register_host_function}; @@ -365,9 +365,9 @@ impl UninitializedSandbox { let mem_mgr_wrapper = SandboxMemoryManager::::from_snapshot(snapshot.as_ref())?; - let host_funcs = Arc::new(Mutex::new(FunctionRegistry::default())); + let host_funcs = Arc::new(Mutex::new(FunctionRegistry::with_default_host_print())); - let mut sandbox = Self { + let sandbox = Self { host_funcs, mgr: mem_mgr_wrapper, max_guest_log_level: None, @@ -383,9 +383,6 @@ impl UninitializedSandbox { pending_file_mappings: Vec::new(), }; - // If we were passed a writer for host print register it otherwise use the default. - sandbox.register_print(default_writer_func)?; - crate::debug!("Sandbox created: {:#?}", sandbox); Ok(sandbox) From 8152f0ff4f510ac1118175ea3adb6405ba258d20 Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Thu, 30 Apr 2026 18:51:09 -0700 Subject: [PATCH 07/15] Add file backed ReadonlySharedMemory Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- src/hyperlight_host/src/mem/memory_region.rs | 4 +- src/hyperlight_host/src/mem/shared_mem.rs | 274 +++++++++++++++++++ 2 files changed, 277 insertions(+), 1 deletion(-) diff --git a/src/hyperlight_host/src/mem/memory_region.rs b/src/hyperlight_host/src/mem/memory_region.rs index 615fe9cac..de3c83a20 100644 --- a/src/hyperlight_host/src/mem/memory_region.rs +++ b/src/hyperlight_host/src/mem/memory_region.rs @@ -158,7 +158,9 @@ impl MemoryRegionType { /// shared memory mapping with guard pages. pub fn surrogate_mapping(&self) -> SurrogateMapping { match self { - MemoryRegionType::MappedFile => SurrogateMapping::ReadOnlyFile, + MemoryRegionType::MappedFile | MemoryRegionType::Snapshot => { + SurrogateMapping::ReadOnlyFile + } _ => SurrogateMapping::SandboxMemory, } } diff --git a/src/hyperlight_host/src/mem/shared_mem.rs b/src/hyperlight_host/src/mem/shared_mem.rs index 5f975f605..7fb7c9eb4 100644 --- a/src/hyperlight_host/src/mem/shared_mem.rs +++ b/src/hyperlight_host/src/mem/shared_mem.rs @@ -2012,6 +2012,14 @@ pub struct ReadonlySharedMemory { /// by `mapping_at`. If `None`, the full `mem_size()` is mapped. #[cfg_attr(unshared_snapshot_mem, allow(dead_code))] guest_mapped_size: Option, + /// Size of the leading guard region (the bytes between + /// `region.ptr` and the start of the usable memory). For most + /// constructors this is exactly `PAGE_SIZE_USIZE`. The Windows + /// `from_file` path can use a larger leading guard when the + /// snapshot file's `memory_offset` exceeds one page (which + /// happens whenever the file carries host-function metadata + /// before the memory blob). + leading_guard_size: usize, } // Safety: HostMapping is only non-Send/Sync (causing // ReadonlySharedMemory to not be automatically Send/Sync) because raw @@ -2033,6 +2041,7 @@ impl ReadonlySharedMemory { Ok(ReadonlySharedMemory { region: anon.region, guest_mapped_size: None, + leading_guard_size: PAGE_SIZE_USIZE, }) } @@ -2045,6 +2054,7 @@ impl ReadonlySharedMemory { Ok(ReadonlySharedMemory { region: anon.region, guest_mapped_size: Some(guest_mapped_size), + leading_guard_size: PAGE_SIZE_USIZE, }) } @@ -2055,6 +2065,244 @@ impl ReadonlySharedMemory { self.guest_mapped_size.unwrap_or_else(|| self.mem_size()) } + /// Create a `ReadonlySharedMemory` backed by a file on disk. + /// + /// Only the `len` bytes at `[offset..offset+len)` (the memory + /// blob) are exposed via `base_ptr()` and `mem_size()`. + /// + /// `[offset..offset+len)` is surrounded by guard regions on the + /// host. + /// + /// `offset` and `len` must both be non-zero multiples of + /// `PAGE_SIZE`. If `guest_mapped_size` is set, it must also be + /// a non-zero multiple of `PAGE_SIZE` no greater than `len`. + pub(crate) fn from_file( + file: &std::fs::File, + offset: usize, + len: usize, + guest_mapped_size: Option, + ) -> Result { + if len == 0 { + return Err(new_error!( + "Cannot create file-backed shared memory with size 0" + )); + } + + if offset == 0 || offset % PAGE_SIZE_USIZE != 0 { + return Err(new_error!( + "snapshot file offset {} must be a non-zero multiple of PAGE_SIZE", + offset + )); + } + + if !len.is_multiple_of(PAGE_SIZE_USIZE) { + return Err(new_error!( + "snapshot mapping length {} must be a multiple of PAGE_SIZE", + len + )); + } + + if let Some(gms) = guest_mapped_size + && (gms == 0 || gms > len || !gms.is_multiple_of(PAGE_SIZE_USIZE)) + { + return Err(new_error!( + "snapshot guest_mapped_size {} must be a non-zero multiple of PAGE_SIZE no greater than len {}", + gms, + len + )); + } + + #[cfg(target_os = "linux")] + { + Self::from_file_linux(file, offset, len, guest_mapped_size) + } + #[cfg(target_os = "windows")] + { + Self::from_file_windows(file, offset, len, guest_mapped_size) + } + } + + #[cfg(target_os = "linux")] + fn from_file_linux( + file: &std::fs::File, + offset: usize, + len: usize, + guest_mapped_size: Option, + ) -> Result { + use std::ffi::c_void; + use std::os::unix::io::AsRawFd; + + use libc::{ + MAP_ANONYMOUS, MAP_FAILED, MAP_FIXED, MAP_NORESERVE, MAP_PRIVATE, PROT_NONE, PROT_READ, + PROT_WRITE, mmap, off_t, size_t, + }; + + let total_size = len.checked_add(2 * PAGE_SIZE_USIZE).ok_or_else(|| { + new_error!("Memory required for file-backed snapshot exceeded usize::MAX") + })?; + + let fd = file.as_raw_fd(); + let offset: off_t = offset + .try_into() + .map_err(|_| new_error!("snapshot file offset {} exceeds off_t range", offset))?; + + // Allocate the full region (guard + usable + guard) as anonymous + let base = unsafe { + mmap( + null_mut(), + total_size as size_t, + PROT_NONE, + MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE, + -1, + 0 as off_t, + ) + }; + if base == MAP_FAILED { + return Err(HyperlightError::MmapFailed( + std::io::Error::last_os_error().raw_os_error(), + )); + } + + // Map the file content over the usable portion (between guard pages). + // PROT_READ | PROT_WRITE: KVM/MSHV require writable host mappings + // to handle copy-on-write page faults from the guest. + // MAP_PRIVATE: writes go to private copies, not the file. + let usable_ptr = unsafe { (base as *mut u8).add(PAGE_SIZE_USIZE) }; + let mapped = unsafe { + mmap( + usable_ptr as *mut c_void, + len as size_t, + PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED | MAP_NORESERVE, + fd, + offset, + ) + }; + if mapped == MAP_FAILED { + unsafe { libc::munmap(base, total_size as size_t) }; + return Err(HyperlightError::MmapFailed( + std::io::Error::last_os_error().raw_os_error(), + )); + } + + // Guard pages at base and base+total_size-PAGE_SIZE are already + // PROT_NONE from the anonymous mapping; MAP_FIXED only replaced + // the middle portion. + + #[allow(clippy::arc_with_non_send_sync)] + Ok(ReadonlySharedMemory { + region: Arc::new(HostMapping { + ptr: base as *mut u8, + size: total_size, + }), + guest_mapped_size, + leading_guard_size: PAGE_SIZE_USIZE, + }) + } + + /// Windows file mappings must start at file offset 0 and cannot + /// extend beyond the file's size, so the view covers + /// `[0 .. offset + len + PAGE_SIZE)`. The leading `offset` bytes + /// (header plus any host function metadata) become the leading + /// guard, recorded in `leading_guard_size`. The trailing + /// `PAGE_SIZE` bytes (written explicitly by `to_file`) become + /// the trailing guard. Both ends are protected with + /// `VirtualProtect(PAGE_NOACCESS)`. + #[cfg(target_os = "windows")] + fn from_file_windows( + file: &std::fs::File, + offset: usize, + len: usize, + guest_mapped_size: Option, + ) -> Result { + use std::os::windows::io::AsRawHandle; + + use windows::Win32::Foundation::HANDLE; + use windows::Win32::System::Memory::{ + CreateFileMappingA, FILE_MAP_READ, MapViewOfFile, PAGE_NOACCESS, PAGE_PROTECTION_FLAGS, + PAGE_READONLY, VirtualProtect, + }; + use windows::core::PCSTR; + + let leading_guard_size = offset; + let total_size = leading_guard_size + .checked_add(len) + .and_then(|n| n.checked_add(PAGE_SIZE_USIZE)) + .ok_or_else(|| { + new_error!("Memory required for file-backed snapshot exceeded usize::MAX") + })?; + debug_assert!(leading_guard_size >= PAGE_SIZE_USIZE); + debug_assert!(leading_guard_size % PAGE_SIZE_USIZE == 0); + + let file_handle = HANDLE(file.as_raw_handle()); + + // Create a read-only file mapping at the exact file size (pass 0,0). + // The file includes trailing PAGE_SIZE padding written by to_file(), + // so the file is at least leading_guard_size + len + PAGE_SIZE bytes. + let handle = + unsafe { CreateFileMappingA(file_handle, None, PAGE_READONLY, 0, 0, PCSTR::null())? }; + + if handle.is_invalid() { + log_then_return!(HyperlightError::MemoryAllocationFailed( + Error::last_os_error().raw_os_error() + )); + } + + // Map exactly total_size (leading region + blob + trailing padding) bytes. + let addr = unsafe { MapViewOfFile(handle, FILE_MAP_READ, 0, 0, total_size) }; + if addr.Value.is_null() { + unsafe { + let _ = windows::Win32::Foundation::CloseHandle(handle); + } + log_then_return!(HyperlightError::MemoryAllocationFailed( + Error::last_os_error().raw_os_error() + )); + } + + #[allow(clippy::arc_with_non_send_sync)] + let region = Arc::new(HostMapping { + ptr: addr.Value as *mut u8, + size: total_size, + handle, + }); + + // Set guard pages on both ends. + let mut unused_old_prot = PAGE_PROTECTION_FLAGS(0); + + // Leading guard: covers the fixed header and any host-function + // metadata + let first_guard = addr.Value; + if let Err(e) = unsafe { + VirtualProtect( + first_guard, + leading_guard_size, + PAGE_NOACCESS, + &mut unused_old_prot, + ) + } { + log_then_return!(WindowsAPIError(e.clone())); + } + + // Trailing guard: the explicit PAGE_SIZE padding at the end of the file. + let last_guard = unsafe { first_guard.add(total_size - PAGE_SIZE_USIZE) }; + if let Err(e) = unsafe { + VirtualProtect( + last_guard, + PAGE_SIZE_USIZE, + PAGE_NOACCESS, + &mut unused_old_prot, + ) + } { + log_then_return!(WindowsAPIError(e.clone())); + } + + Ok(ReadonlySharedMemory { + region, + guest_mapped_size, + leading_guard_size, + }) + } + pub(crate) fn as_slice(&self) -> &[u8] { unsafe { std::slice::from_raw_parts(self.base_ptr(), self.mem_size()) } } @@ -2098,6 +2346,32 @@ impl SharedMemory for ReadonlySharedMemory { fn region(&self) -> &HostMapping { &self.region } + // Override the default trait accessors to use the variable-sized + // leading guard. The trailing guard is always `PAGE_SIZE_USIZE`. + fn base_addr(&self) -> usize { + self.region().ptr as usize + self.leading_guard_size + } + fn base_ptr(&self) -> *mut u8 { + self.region().ptr.wrapping_add(self.leading_guard_size) + } + fn mem_size(&self) -> usize { + self.region().size - self.leading_guard_size - PAGE_SIZE_USIZE + } + fn host_region_base(&self) -> ::HostBaseType { + #[cfg(not(windows))] + { + self.base_addr() + } + #[cfg(windows)] + { + super::memory_region::HostRegionBase { + from_handle: self.region().handle.into(), + handle_base: self.region().ptr as usize, + handle_size: self.region().size, + offset: self.leading_guard_size, + } + } + } // There's no way to get exclusive (and therefore writable) access // to a ReadonlySharedMemory. fn with_exclusivity T>( From ea7fb93d3f98cff3ff8d5c22177ff34a0141b691 Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Thu, 30 Apr 2026 18:52:41 -0700 Subject: [PATCH 08/15] Persist host function metadata in Snapshot Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- src/hyperlight_host/src/mem/mgr.rs | 4 + .../src/sandbox/initialized_multi_use.rs | 6 ++ .../src/sandbox/snapshot/mod.rs | 78 +++++++++++++++++++ 3 files changed, 88 insertions(+) diff --git a/src/hyperlight_host/src/mem/mgr.rs b/src/hyperlight_host/src/mem/mgr.rs index 9e5d843d1..9dede7083 100644 --- a/src/hyperlight_host/src/mem/mgr.rs +++ b/src/hyperlight_host/src/mem/mgr.rs @@ -22,6 +22,7 @@ use hyperlight_common::flatbuffer_wrappers::function_call::{ }; use hyperlight_common::flatbuffer_wrappers::function_types::FunctionCallResult; use hyperlight_common::flatbuffer_wrappers::guest_log_data::GuestLogData; +use hyperlight_common::flatbuffer_wrappers::host_function_details::HostFunctionDetails; use hyperlight_common::vmem::{self, PAGE_TABLE_SIZE}; #[cfg(all(feature = "crashdump", not(feature = "i686-guest")))] use hyperlight_common::vmem::{BasicMapping, MappingKind}; @@ -298,6 +299,7 @@ where } /// Create a snapshot with the given mapped regions + #[allow(clippy::too_many_arguments)] pub(crate) fn snapshot( &mut self, sandbox_id: u64, @@ -306,6 +308,7 @@ where rsp_gva: u64, sregs: CommonSpecialRegisters, entrypoint: NextAction, + host_functions: HostFunctionDetails, ) -> Result { self.snapshot_count += 1; Snapshot::new( @@ -320,6 +323,7 @@ where sregs, entrypoint, self.snapshot_count, + host_functions, ) } } diff --git a/src/hyperlight_host/src/sandbox/initialized_multi_use.rs b/src/hyperlight_host/src/sandbox/initialized_multi_use.rs index 241622cab..e6672f874 100644 --- a/src/hyperlight_host/src/sandbox/initialized_multi_use.rs +++ b/src/hyperlight_host/src/sandbox/initialized_multi_use.rs @@ -207,6 +207,11 @@ impl MultiUseSandbox { .get_snapshot_sregs() .map_err(|e| HyperlightError::HyperlightVmError(e.into()))?; let entrypoint = self.vm.get_entrypoint(); + let host_functions = (&*self.host_funcs.try_lock().map_err(|e| { + crate::new_error!("Error locking host_funcs at {}:{}: {}", file!(), line!(), e) + })?) + .into(); + let memory_snapshot = self.mem_mgr.snapshot( self.id, mapped_regions_vec, @@ -214,6 +219,7 @@ impl MultiUseSandbox { stack_top_gpa, sregs, entrypoint, + host_functions, )?; let snapshot = Arc::new(memory_snapshot); self.snapshot = Some(snapshot.clone()); diff --git a/src/hyperlight_host/src/sandbox/snapshot/mod.rs b/src/hyperlight_host/src/sandbox/snapshot/mod.rs index e4c7b1133..b37b7f361 100644 --- a/src/hyperlight_host/src/sandbox/snapshot/mod.rs +++ b/src/hyperlight_host/src/sandbox/snapshot/mod.rs @@ -17,6 +17,7 @@ limitations under the License. use std::collections::{BTreeMap, HashMap}; use std::sync::atomic::{AtomicU64, Ordering}; +use hyperlight_common::flatbuffer_wrappers::host_function_details::HostFunctionDetails; use hyperlight_common::layout::{scratch_base_gpa, scratch_base_gva}; use hyperlight_common::vmem; use hyperlight_common::vmem::{ @@ -115,6 +116,16 @@ pub struct Snapshot { /// restored sandbox's guest-visible counter so the guest can tell /// which snapshot it is currently a clone of. snapshot_generation: u64, + + /// Names and signatures of host functions registered on the + /// sandbox at the time this snapshot was taken. Persisted to disk + /// so that [`crate::MultiUseSandbox::from_snapshot`] can reject + /// a `HostFunctions` set that is missing required functions or + /// has mismatched signatures. + /// + /// Empty for snapshots created via test-only constructors that + /// bypass the normal sandbox path. + host_functions: HostFunctionDetails, } impl core::convert::AsRef for Snapshot { fn as_ref(&self) -> &Self { @@ -423,6 +434,9 @@ impl Snapshot { sregs: None, entrypoint: NextAction::Initialise(load_addr + entrypoint_va - base_va), snapshot_generation: 0, + host_functions: HostFunctionDetails { + host_functions: None, + }, }) } @@ -447,6 +461,7 @@ impl Snapshot { sregs: CommonSpecialRegisters, entrypoint: NextAction, snapshot_generation: u64, + host_functions: HostFunctionDetails, ) -> Result { let mut phys_seen = HashMap::::new(); let scratch_gva = scratch_base_gva(layout.get_scratch_size()); @@ -610,6 +625,7 @@ impl Snapshot { sregs: Some(sregs), entrypoint, snapshot_generation, + host_functions, }) } @@ -663,6 +679,65 @@ impl Snapshot { pub(crate) fn entrypoint(&self) -> NextAction { self.entrypoint } + + /// Validate that `provided` is a superset of the host functions + /// recorded in this snapshot: every function that was registered + /// at snapshot time must also be present in `provided` with a + /// matching signature. Extras in `provided` are allowed. + /// + /// A snapshot with no recorded host functions (e.g. one + /// produced by a test-only constructor) accepts any `provided` + /// set. + pub(crate) fn validate_host_functions(&self, provided: &crate::HostFunctions) -> Result<()> { + let required = match &self.host_functions.host_functions { + Some(v) => v, + None => return Ok(()), + }; + if required.is_empty() { + return Ok(()); + } + + // Build a HostFunctionDetails view of the provided registry + // using the existing `From<&FunctionRegistry>` impl. + let provided_details: HostFunctionDetails = provided.inner().into(); + let provided_funcs = provided_details.host_functions.unwrap_or_default(); + + let mut missing: Vec = Vec::new(); + let mut signature_mismatches: Vec = Vec::new(); + + for req in required { + match provided_funcs + .iter() + .find(|f| f.function_name == req.function_name) + { + None => missing.push(req.function_name.clone()), + Some(found) + if found.parameter_types != req.parameter_types + || found.return_type != req.return_type => + { + signature_mismatches.push(format!( + "{}: snapshot has {:?} -> {:?}, registered {:?} -> {:?}", + req.function_name, + req.parameter_types, + req.return_type, + found.parameter_types, + found.return_type, + )); + } + Some(_) => {} + } + } + + if missing.is_empty() && signature_mismatches.is_empty() { + return Ok(()); + } + + Err(crate::new_error!( + "snapshot host function mismatch: missing={:?}, signature_mismatches={:?}", + missing, + signature_mismatches + )) + } } impl PartialEq for Snapshot { @@ -674,6 +749,7 @@ impl PartialEq for Snapshot { #[cfg(test)] #[cfg(not(feature = "i686-guest"))] mod tests { + use hyperlight_common::flatbuffer_wrappers::host_function_details::HostFunctionDetails; use hyperlight_common::vmem::{self, BasicMapping, Mapping, MappingKind, PAGE_SIZE}; use crate::hypervisor::regs::CommonSpecialRegisters; @@ -747,6 +823,7 @@ mod tests { default_sregs(), super::NextAction::None, 1, + HostFunctionDetails::default(), ) .unwrap(); @@ -764,6 +841,7 @@ mod tests { default_sregs(), super::NextAction::None, 2, + HostFunctionDetails::default(), ) .unwrap(); From 5d80eac225a2fbfd09a46bd96dcb7ebbcfb496c4 Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Fri, 1 May 2026 13:24:48 -0700 Subject: [PATCH 09/15] Make gdb work for already initialised snapshots Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- .../src/hypervisor/gdb/arch.rs | 9 +----- .../src/hypervisor/gdb/event_loop.rs | 1 - src/hyperlight_host/src/hypervisor/gdb/mod.rs | 4 --- .../src/hypervisor/hyperlight_vm/mod.rs | 31 ++++++++++++++----- .../src/hypervisor/hyperlight_vm/x86_64.rs | 17 ++++++++-- 5 files changed, 39 insertions(+), 23 deletions(-) diff --git a/src/hyperlight_host/src/hypervisor/gdb/arch.rs b/src/hyperlight_host/src/hypervisor/gdb/arch.rs index b2ebb82a3..67da6f5b2 100644 --- a/src/hyperlight_host/src/hypervisor/gdb/arch.rs +++ b/src/hyperlight_host/src/hypervisor/gdb/arch.rs @@ -61,9 +61,8 @@ pub(crate) const DR6_HW_BP_FLAGS_MASK: u64 = 0x0F << DR6_HW_BP_FLAGS_POS; /// Determine the reason the vCPU stopped /// This is done by checking the DR6 register and the exception id pub(crate) fn vcpu_stop_reason( - vm: &mut dyn DebuggableVm, + vm: &dyn DebuggableVm, dr6: u64, - entrypoint: u64, exception: u32, ) -> std::result::Result { let CommonRegisters { rip, .. } = vm.regs()?; @@ -81,10 +80,6 @@ pub(crate) fn vcpu_stop_reason( // Check page 19-4 Vol. 3B of Intel 64 and IA-32 // Architectures Software Developer's Manual if DR6_HW_BP_FLAGS_MASK & dr6 != 0 { - if rip == entrypoint { - vm.remove_hw_breakpoint(entrypoint)?; - return Ok(VcpuStopReason::EntryPointBp); - } return Ok(VcpuStopReason::HwBp); } } @@ -98,12 +93,10 @@ pub(crate) fn vcpu_stop_reason( r"The vCPU exited because of an unknown reason: rip: {:?} dr6: {:?} - entrypoint: {:?} exception: {:?} ", rip, dr6, - entrypoint, exception, ); diff --git a/src/hyperlight_host/src/hypervisor/gdb/event_loop.rs b/src/hyperlight_host/src/hypervisor/gdb/event_loop.rs index bc7c9fd14..5edd81b50 100644 --- a/src/hyperlight_host/src/hypervisor/gdb/event_loop.rs +++ b/src/hyperlight_host/src/hypervisor/gdb/event_loop.rs @@ -59,7 +59,6 @@ impl run_blocking::BlockingEventLoop for GdbBlockingEventLoop { // Resume execution if unknown reason for stop let stop_response = match stop_reason { VcpuStopReason::DoneStep => BaseStopReason::DoneStep, - VcpuStopReason::EntryPointBp => BaseStopReason::HwBreak(()), VcpuStopReason::SwBp => BaseStopReason::SwBreak(()), VcpuStopReason::HwBp => BaseStopReason::HwBreak(()), // This is a consequence of the GDB client sending an interrupt signal diff --git a/src/hyperlight_host/src/hypervisor/gdb/mod.rs b/src/hyperlight_host/src/hypervisor/gdb/mod.rs index 94396e5ae..0a0685f71 100644 --- a/src/hyperlight_host/src/hypervisor/gdb/mod.rs +++ b/src/hyperlight_host/src/hypervisor/gdb/mod.rs @@ -171,10 +171,6 @@ impl DebugMemoryAccess { pub enum VcpuStopReason { Crash, DoneStep, - /// Hardware breakpoint inserted by the hypervisor so the guest can be stopped - /// at the entry point. This is used to avoid the guest from executing - /// the entry point code before the debugger is connected - EntryPointBp, HwBp, SwBp, Interrupt, diff --git a/src/hyperlight_host/src/hypervisor/hyperlight_vm/mod.rs b/src/hyperlight_host/src/hypervisor/hyperlight_vm/mod.rs index 830b856c0..afb332a66 100644 --- a/src/hyperlight_host/src/hypervisor/hyperlight_vm/mod.rs +++ b/src/hyperlight_host/src/hypervisor/hyperlight_vm/mod.rs @@ -389,6 +389,12 @@ pub(crate) struct HyperlightVm { pub(super) gdb_conn: Option>, #[cfg(gdb)] pub(super) sw_breakpoints: HashMap, // addr -> original instruction + /// One-shot hw breakpoint installed at the entry address when gdb is + /// enabled, so the gdb stub gets a `VcpuStopped` to enter its event + /// loop on the first vCPU run after construction. Cleared on first + /// hit by `handle_debug`. + #[cfg(gdb)] + pub(super) one_shot_entry_bp: Option, #[cfg(feature = "mem_profile")] pub(super) trace_info: MemTraceInfo, #[cfg(crashdump)] @@ -598,17 +604,28 @@ impl HyperlightVm { match exit_reason { #[cfg(gdb)] Ok(VmExit::Debug { dr6, exception }) => { - let initialise = match self.entrypoint { - NextAction::Initialise(initialise) => initialise, - _ => 0, - }; - // Handle debug event (breakpoints) + // Classify the debug exit. `vcpu_stop_reason` is a + // pure classifier and has no side effects on the VM. let stop_reason = crate::hypervisor::gdb::arch::vcpu_stop_reason( - self.vm.as_mut(), + self.vm.as_ref(), dr6, - initialise, exception, )?; + // Remove the one-shot entry breakpoint installed by + // `HyperlightVm::new` the first time it fires so it + // does not interfere with later user-installed + // breakpoints at the same address. + if matches!(stop_reason, VcpuStopReason::HwBp) + && let Some(entry_addr) = self.one_shot_entry_bp + { + let rip = self.vm.regs().map_err(VcpuStopReasonError::GetRegs)?.rip; + if rip == entry_addr { + self.vm + .remove_hw_breakpoint(entry_addr) + .map_err(VcpuStopReasonError::RemoveHwBreakpoint)?; + self.one_shot_entry_bp = None; + } + } if let Err(e) = self.handle_debug(dbg_mem_access_fn.clone(), stop_reason) { break Err(e.into()); } diff --git a/src/hyperlight_host/src/hypervisor/hyperlight_vm/x86_64.rs b/src/hyperlight_host/src/hypervisor/hyperlight_vm/x86_64.rs index 16ac55ad3..6feff13f1 100644 --- a/src/hyperlight_host/src/hypervisor/hyperlight_vm/x86_64.rs +++ b/src/hyperlight_host/src/hypervisor/hyperlight_vm/x86_64.rs @@ -168,6 +168,8 @@ impl HyperlightVm { gdb_conn, #[cfg(gdb)] sw_breakpoints: HashMap::new(), + #[cfg(gdb)] + one_shot_entry_bp: None, #[cfg(feature = "mem_profile")] trace_info, #[cfg(crashdump)] @@ -182,12 +184,21 @@ impl HyperlightVm { #[cfg(gdb)] if ret.gdb_conn.is_some() { ret.send_dbg_msg(DebugResponse::InterruptHandle(ret.interrupt_handle.clone()))?; - // Add breakpoint to the entry point address, if we are going to initialise + // Add breakpoint at the entry point address. The breakpoint + // is removed on first hit by the run loop. Tracked via + // `one_shot_entry_bp` so it does not interfere with later + // user-installed breakpoints at the same address. ret.vm.set_debug(true).map_err(VmError::Debug)?; - if let NextAction::Initialise(initialise) = entrypoint { + let entry_addr = match entrypoint { + NextAction::Initialise(addr) | NextAction::Call(addr) => Some(addr), + #[cfg(test)] + NextAction::None => None, + }; + if let Some(addr) = entry_addr { ret.vm - .add_hw_breakpoint(initialise) + .add_hw_breakpoint(addr) .map_err(CreateHyperlightVmError::AddHwBreakpoint)?; + ret.one_shot_entry_bp = Some(addr); } } From 9d00b24bb436a9da35544ea08cb45e764f17dbc9 Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Thu, 30 Apr 2026 18:53:01 -0700 Subject: [PATCH 10/15] Add MultiUseSandbox from_snapshot Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- .../src/sandbox/initialized_multi_use.rs | 229 ++++++++++++++++++ 1 file changed, 229 insertions(+) diff --git a/src/hyperlight_host/src/sandbox/initialized_multi_use.rs b/src/hyperlight_host/src/sandbox/initialized_multi_use.rs index e6672f874..9898414af 100644 --- a/src/hyperlight_host/src/sandbox/initialized_multi_use.rs +++ b/src/hyperlight_host/src/sandbox/initialized_multi_use.rs @@ -145,6 +145,193 @@ impl MultiUseSandbox { self.pt_root_finder = Some(finder); } + /// Create a `MultiUseSandbox` directly from a [`Snapshot`], + /// bypassing [`UninitializedSandbox`](crate::UninitializedSandbox) + /// and [`evolve()`](crate::UninitializedSandbox::evolve). + /// + /// This is useful for fast sandbox creation when a snapshot of + /// an already-initialized guest is available, either saved to disk + /// or captured in memory from another sandbox. + /// + /// The provided [`HostFunctions`] must include every host function + /// that was registered on the sandbox at the time the snapshot was + /// taken (matched by name and signature). Additional host functions + /// not present in the snapshot are allowed. + /// + /// An optional [`SandboxConfiguration`](crate::sandbox::SandboxConfiguration) + /// can be supplied to override runtime settings such as timeouts and + /// interrupt behavior. Memory layout fields + /// (`input_data_size`, `output_data_size`, `heap_size`, `scratch_size`) + /// are always taken from the snapshot. Any values supplied in + /// `config` for those fields are ignored. + /// + /// # Examples + /// + /// From a snapshot taken on another sandbox: + /// + /// ```no_run + /// # use std::sync::Arc; + /// # use hyperlight_host::{HostFunctions, MultiUseSandbox, UninitializedSandbox, GuestBinary}; + /// # fn example() -> Result<(), Box> { + /// // Create and initialize a sandbox the normal way + /// let mut sandbox: MultiUseSandbox = UninitializedSandbox::new( + /// GuestBinary::FilePath("guest.bin".into()), + /// None, + /// )?.evolve()?; + /// + /// // Capture a snapshot of the initialized state + /// let snapshot = sandbox.snapshot()?; + /// + /// // Create a new sandbox directly from the snapshot + /// let mut sandbox2 = MultiUseSandbox::from_snapshot(snapshot, HostFunctions::default(), None)?; + /// let result: i32 = sandbox2.call("GetValue", ())?; + /// # Ok(()) + /// # } + /// ``` + /// + /// From a snapshot loaded from disk: + /// + /// ```no_run + /// # use std::sync::Arc; + /// # use hyperlight_host::{HostFunctions, MultiUseSandbox}; + /// # use hyperlight_host::sandbox::snapshot::Snapshot; + /// # fn example() -> Result<(), Box> { + /// let snapshot = Arc::new(Snapshot::from_file("guest_snapshot.hls")?); + /// let mut sandbox = MultiUseSandbox::from_snapshot(snapshot, HostFunctions::default(), None)?; + /// let result: String = sandbox.call("Echo", "hello".to_string())?; + /// # Ok(()) + /// # } + /// ``` + #[instrument(err(Debug), skip_all, parent = Span::current(), level = "Trace")] + pub fn from_snapshot( + snapshot: Arc, + host_funcs: crate::HostFunctions, + config: Option, + ) -> Result { + use rand::RngExt; + + use crate::mem::ptr::RawPtr; + use crate::sandbox::uninitialized_evolve::set_up_hypervisor_partition; + + // Validate that the provided host functions are a superset of + // those required by the snapshot. + snapshot.validate_host_functions(&host_funcs)?; + + let host_funcs = Arc::new(Mutex::new(host_funcs.into_inner())); + + let stack_top_gva = snapshot.stack_top_gva(); + // Start from the caller's config (if any) so runtime fields + // such as timeouts and interrupt knobs are honored, then + // overwrite the layout fields from the snapshot. The on-disk + // layout is fixed, so any layout values supplied by the + // caller are silently ignored. Warn if the caller passed a + // config whose layout fields disagree with the snapshot, so + // the override is at least visible. + let caller_supplied_config = config.is_some(); + let mut config = config.unwrap_or_default(); + if caller_supplied_config { + warn_on_layout_override(&config, snapshot.layout()); + } + config.set_input_data_size(snapshot.layout().input_data_size); + config.set_output_data_size(snapshot.layout().output_data_size); + config.set_heap_size(snapshot.layout().heap_size as u64); + config.set_scratch_size(snapshot.layout().get_scratch_size()); + let load_info = snapshot.load_info(); + + let mgr = crate::mem::mgr::SandboxMemoryManager::from_snapshot(&snapshot)?; + let (mut hshm, gshm) = mgr.build()?; + + let page_size = u32::try_from(page_size::get())? as usize; + + #[cfg(target_os = "linux")] + crate::signal_handlers::setup_signal_handlers(&config)?; + + // Build the runtime config from the caller's `SandboxConfiguration` + // so that `guest_core_dump` (crashdump) and `guest_debug_info` (gdb) + // take effect just like they do in the normal evolve path. + // `binary_path` and `entry_point` are not available from a snapshot + // and are left unset. This only affects metadata in core dumps. + #[cfg(any(crashdump, gdb))] + let rt_cfg = crate::sandbox::uninitialized::SandboxRuntimeConfig { + #[cfg(crashdump)] + binary_path: None, + #[cfg(gdb)] + debug_info: config.get_guest_debug_info(), + #[cfg(crashdump)] + guest_core_dump: config.get_guest_core_dump(), + #[cfg(crashdump)] + entry_point: None, + }; + + let mut vm = set_up_hypervisor_partition( + gshm, + &config, + stack_top_gva, + page_size, + #[cfg(any(crashdump, gdb))] + rt_cfg, + load_info, + )?; + + let seed = { + let mut rng = rand::rng(); + rng.random::() + }; + let peb_addr = RawPtr::from(u64::try_from(hshm.layout.peb_address())?); + + #[cfg(gdb)] + let dbg_mem_access_hdl = Arc::new(Mutex::new(hshm.clone())); + + vm.initialise( + peb_addr, + seed, + page_size as u32, + &mut hshm, + &host_funcs, + None, + #[cfg(gdb)] + dbg_mem_access_hdl, + ) + .map_err(crate::hypervisor::hyperlight_vm::HyperlightVmError::Initialize)?; + + // If the snapshot was taken from an already-initialized guest + // (NextAction::Call), apply the captured special registers so + // the guest resumes in the correct CPU state. + #[cfg(not(feature = "i686-guest"))] + if matches!(snapshot.entrypoint(), super::snapshot::NextAction::Call(_)) { + let sregs = snapshot.sregs().ok_or_else(|| { + crate::new_error!("snapshot with NextAction::Call must have captured sregs") + })?; + vm.apply_sregs(hshm.layout.get_pt_base_gpa(), sregs) + .map_err(|e| { + crate::HyperlightError::HyperlightVmError( + crate::hypervisor::hyperlight_vm::HyperlightVmError::Restore(e), + ) + })?; + } + + #[cfg(gdb)] + let dbg_mem_wrapper = Arc::new(Mutex::new(hshm.clone())); + + let mut sbox = MultiUseSandbox::from_uninit( + host_funcs, + hshm, + vm, + #[cfg(gdb)] + dbg_mem_wrapper, + ); + // Use the snapshot's sandbox_id so that restore() back to this + // snapshot is permitted. The id is process-local and never + // persisted to disk: `Snapshot::from_file` assigns a fresh id + // on every load, so two `from_file` calls of the same path + // yield restore-incompatible sandboxes (which is the intended + // safer default). Sandboxes built from clones of the same + // in-memory `Arc` share the id and are mutually + // restore-compatible. + sbox.id = snapshot.sandbox_id(); + Ok(sbox) + } + /// Creates a snapshot of the sandbox's current memory state. /// /// The snapshot is tied to this specific sandbox instance and can only be @@ -949,6 +1136,48 @@ impl std::fmt::Debug for MultiUseSandbox { } } +/// Emit a warning for each memory-layout field in `caller` that +/// disagrees with `snapshot`. Used by [`MultiUseSandbox::from_snapshot`] +/// to surface ignored caller-supplied layout values, since those +/// fields are always taken from the snapshot. +fn warn_on_layout_override( + caller: &crate::sandbox::SandboxConfiguration, + snapshot: &crate::mem::layout::SandboxMemoryLayout, +) { + let mismatches: &[(&str, u64, u64)] = &[ + ( + "input_data_size", + caller.get_input_data_size() as u64, + snapshot.input_data_size as u64, + ), + ( + "output_data_size", + caller.get_output_data_size() as u64, + snapshot.output_data_size as u64, + ), + ( + "heap_size", + caller.get_heap_size(), + snapshot.heap_size as u64, + ), + ( + "scratch_size", + caller.get_scratch_size() as u64, + snapshot.get_scratch_size() as u64, + ), + ]; + for (name, supplied, snap) in mismatches { + if supplied != snap { + tracing::warn!( + "from_snapshot ignoring caller-supplied {} ({}); using snapshot value ({})", + name, + supplied, + snap + ); + } + } +} + #[cfg(test)] mod tests { use std::sync::{Arc, Barrier}; From e37900b3a2c6f92cbbb29a68f08ce12db4e100f9 Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Fri, 1 May 2026 16:01:13 -0700 Subject: [PATCH 11/15] Add snapshot file format with persistence and load Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- Cargo.lock | 21 + src/hyperlight_host/Cargo.toml | 1 + .../src/sandbox/snapshot/file.rs | 1028 +++++++++++++++++ .../src/sandbox/snapshot/mod.rs | 3 + 4 files changed, 1053 insertions(+) create mode 100644 src/hyperlight_host/src/sandbox/snapshot/file.rs diff --git a/Cargo.lock b/Cargo.lock index 8002f1058..a4e0a2776 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -336,6 +336,26 @@ version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" +[[package]] +name = "bytemuck" +version = "1.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "bytes" version = "1.11.1" @@ -1565,6 +1585,7 @@ dependencies = [ "bitflags 2.11.1", "blake3", "built", + "bytemuck", "cfg-if", "cfg_aliases", "chrono", diff --git a/src/hyperlight_host/Cargo.toml b/src/hyperlight_host/Cargo.toml index f2f54008e..30aa78ba5 100644 --- a/src/hyperlight_host/Cargo.toml +++ b/src/hyperlight_host/Cargo.toml @@ -51,6 +51,7 @@ metrics = "0.24.5" serde_json = "1.0" elfcore = { version = "2.0", optional = true } uuid = { version = "1.23.1", features = ["v4"] } +bytemuck = { version = "1.16", features = ["derive"] } [target.'cfg(windows)'.dependencies] windows = { version = "0.62", features = [ diff --git a/src/hyperlight_host/src/sandbox/snapshot/file.rs b/src/hyperlight_host/src/sandbox/snapshot/file.rs new file mode 100644 index 000000000..1e99be3f3 --- /dev/null +++ b/src/hyperlight_host/src/sandbox/snapshot/file.rs @@ -0,0 +1,1028 @@ +/* +Copyright 2025 The Hyperlight Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +//! Snapshot file format: serialization, deserialization, and the +//! associated `Snapshot::to_file` / `Snapshot::from_file` methods. +//! +//! The on-disk byte layout is whatever the three `#[repr(C)]` POD +//! structs below declare: `RawPreamble`, `RawHeaderV1`, `RawSregs`. +//! Each derives `bytemuck::Pod` and `bytemuck::Zeroable`, which the +//! derive macro proves at compile time means there is no padding and +//! every bit pattern is a valid value of the struct's fields. There +//! are no separate numeric offsets to keep in sync with the code. +//! +//! All multi-byte integers are little-endian (gated by a +//! `compile_error!` on big-endian targets below). +//! +//! The fixed-position prefix is followed by an optional host-function +//! flatbuffer of length `host_funcs_size`, then zero padding to the +//! next PAGE_SIZE boundary, then the memory blob (the mmap target). +//! The memory blob's file offset is recorded in `memory_offset` and +//! is always page-aligned. A PAGE_SIZE trailing zero region follows +//! the blob (Windows guard-page backing). +//! +//! ```text +//! +----------------------+ +//! | RawPreamble | magic "HLS\0" + format_version +//! +----------------------+ +//! | RawHeaderV1 | arch, abi_version, hash, stack_top_gva, +//! | | entrypoint tag+addr, layout fields, +//! | | memory_size, memory_offset, has_sregs, +//! | | hypervisor, host_funcs_size +//! +----------------------+ +//! | RawSregs | segments, tables, control regs, bitmap. +//! | | Always written; ignored on load if +//! | | has_sregs == 0. +//! +----------------------+ +//! | host_funcs blob | host_funcs_size bytes (0 if absent), +//! | | serialized HostFunctionDetails flatbuffer +//! +----------------------+ +//! | zero padding | pads to next PAGE_SIZE boundary +//! +----------------------+ <- memory_offset +//! | memory blob | memory_size bytes (mmap target) +//! +----------------------+ +//! | trailing PAGE_SIZE | Windows guard-page backing; ignored on Linux +//! +----------------------+ +//! ``` +//! +//! `memory_offset == align_up(FIXED_PREFIX_SIZE + host_funcs_size, +//! PAGE_SIZE)`, where `FIXED_PREFIX_SIZE = sizeof(RawPreamble) + +//! sizeof(RawHeaderV1) + sizeof(RawSregs)`. With no host functions +//! this lands at exactly PAGE_SIZE. + +use hyperlight_common::flatbuffer_wrappers::host_function_details::HostFunctionDetails; +use hyperlight_common::vmem::PAGE_SIZE; + +use super::{NextAction, SANDBOX_CONFIGURATION_COUNTER, Snapshot}; +use crate::hypervisor::regs::CommonSpecialRegisters; +use crate::mem::layout::SandboxMemoryLayout; +use crate::mem::shared_mem::{ReadonlySharedMemory, SharedMemory}; + +const SNAPSHOT_MAGIC: &[u8; 4] = b"HLS\0"; + +/// ABI version for the snapshot memory blob. This must be bumped +/// whenever a change affects the contents or interpretation of the +/// memory blob - i.e., the contract between the host runtime and +/// the guest binary that determines how snapshot memory is produced +/// and consumed. +/// +/// Examples of changes that require a bump: +/// +/// - Memory layout: `SandboxMemoryLayout` offset computation, memory +/// region definitions, page table format +/// - Host-guest interface: PEB struct layout, calling convention, +/// dispatch mechanism, input/output buffer format +/// - Guest init state: entry point setup, GDT/IDT/TSS initialization, +/// or any startup code in `hyperlight_guest_bin` whose results are +/// captured in the snapshot (e.g. sregs) +/// +/// Unlike `FormatVersion` (which covers the file header byte layout +/// and may allow conversion between versions), an ABI mismatch means +/// the memory blob is incompatible and the snapshot must be +/// regenerated from the guest binary. +const SNAPSHOT_ABI_VERSION: u64 = 1; + +/// Maximum size of the host-functions flatbuffer blob in a snapshot +/// file. Bounds the allocation done at load time before the +/// flatbuffer is parsed. The legitimate size for hundreds of host +/// functions is well under this cap. +const MAX_HOST_FUNCS_SIZE: u64 = 1024 * 1024; + +/// Snapshot file format version. +#[derive(Copy, Clone, Debug, PartialEq)] +enum FormatVersion { + V1 = 1, +} + +impl FormatVersion { + fn from_u32(v: u32) -> crate::Result { + match v { + 1 => Ok(Self::V1), + _ => Err(crate::new_error!( + "unsupported snapshot format version {} (this build supports V1). \ + The file header layout may be convertible to the current format", + v + )), + } + } +} + +/// Architecture tag for snapshot files. +#[derive(Copy, Clone, Debug, PartialEq)] +enum ArchTag { + X86_64 = 1, + Aarch64 = 2, + I686 = 3, +} + +impl ArchTag { + fn current() -> Self { + #[cfg(feature = "i686-guest")] + { + Self::I686 + } + #[cfg(all(not(feature = "i686-guest"), target_arch = "x86_64"))] + { + Self::X86_64 + } + #[cfg(all(not(feature = "i686-guest"), target_arch = "aarch64"))] + { + Self::Aarch64 + } + } + + fn from_u64(v: u64) -> crate::Result { + match v { + 1 => Ok(Self::X86_64), + 2 => Ok(Self::Aarch64), + 3 => Ok(Self::I686), + _ => Err(crate::new_error!("unknown architecture tag: {}", v)), + } + } +} + +/// Hypervisor tag for snapshot files. +/// +/// Segment register hidden-cache fields (unusable, type_, granularity, +/// db) differ between hypervisors for the same architectural state. +/// Restoring sregs captured on one hypervisor into another may be +/// rejected or produce subtly wrong behavior. The tag ensures +/// snapshots are only loaded on the same hypervisor that created them. +#[derive(Copy, Clone, Debug, PartialEq)] +pub(super) enum HypervisorTag { + Kvm = 1, + Mshv = 2, + Whp = 3, +} + +impl HypervisorTag { + pub(super) fn current() -> Option { + #[allow(unused_imports)] + use crate::hypervisor::virtual_machine::HypervisorType; + use crate::hypervisor::virtual_machine::get_available_hypervisor; + + match get_available_hypervisor() { + #[cfg(kvm)] + Some(HypervisorType::Kvm) => Some(Self::Kvm), + #[cfg(mshv3)] + Some(HypervisorType::Mshv) => Some(Self::Mshv), + #[cfg(target_os = "windows")] + Some(HypervisorType::Whp) => Some(Self::Whp), + None => None, + } + } + + fn from_u64(v: u64) -> crate::Result { + match v { + 1 => Ok(Self::Kvm), + 2 => Ok(Self::Mshv), + 3 => Ok(Self::Whp), + _ => Err(crate::new_error!("unknown hypervisor tag: {}", v)), + } + } + + fn name(&self) -> &'static str { + match self { + Self::Kvm => "KVM", + Self::Mshv => "MSHV", + Self::Whp => "WHP", + } + } +} + +// All raw header structs use little-endian on-disk encoding. Both +// supported architectures (x86_64, aarch64) are little-endian, so we +// just refuse to compile on a hypothetical big-endian target rather +// than byte-swap on every field access. +#[cfg(not(target_endian = "little"))] +compile_error!("snapshot file format requires a little-endian target"); + +/// Memory layout fields stored in the snapshot file (validated form). +/// These are the primary inputs needed to reconstruct a `SandboxMemoryLayout`. +struct LayoutFields { + input_data_size: usize, + output_data_size: usize, + heap_size: usize, + code_size: usize, + init_data_size: usize, + init_data_permissions: Option, + scratch_size: usize, + snapshot_size: usize, + pt_size: Option, +} + +/// Fixed preamble at the start of every snapshot file (validated form). +/// Never changes across format versions so it can always be read to +/// determine which version-specific header follows. +struct SnapshotPreamble { + magic: [u8; 4], + format_version: FormatVersion, +} + +/// V1 snapshot header (validated form). +struct SnapshotHeaderV1 { + arch: ArchTag, + abi_version: u64, + stack_top_gva: u64, + entrypoint: NextAction, + layout: LayoutFields, + memory_size: usize, + memory_offset: u64, + has_sregs: bool, + hypervisor: HypervisorTag, + /// Byte length of the host-function-details flatbuffer that + /// follows the fixed header. `0` means no host functions are + /// stored. + host_funcs_size: u64, +} + +// --- Raw POD on-disk structs --- +// +// These mirror the bytes on disk one-for-one. Reading and writing +// goes through `bytemuck`; field-level validation lives in `From` / +// `TryFrom` impls below. + +#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)] +#[repr(C)] +pub(super) struct RawPreamble { + pub(super) magic: [u8; 4], + pub(super) format_version: u32, +} + +#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)] +#[repr(C)] +pub(super) struct RawHeaderV1 { + pub(super) arch: u64, + pub(super) abi_version: u64, + pub(super) stack_top_gva: u64, + pub(super) entrypoint_tag: u64, + pub(super) entrypoint_addr: u64, + pub(super) input_data_size: u64, + pub(super) output_data_size: u64, + pub(super) heap_size: u64, + pub(super) code_size: u64, + pub(super) init_data_size: u64, + pub(super) init_data_permissions: u64, + pub(super) scratch_size: u64, + pub(super) snapshot_size: u64, + pub(super) pt_size: u64, + pub(super) memory_size: u64, + pub(super) memory_offset: u64, + pub(super) has_sregs: u64, + pub(super) hypervisor: u64, + pub(super) host_funcs_size: u64, +} + +#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)] +#[repr(C)] +struct RawSegmentRegister { + base: u64, + limit: u64, + selector: u64, + type_: u64, + present: u64, + dpl: u64, + db: u64, + s: u64, + l: u64, + g: u64, + avl: u64, + unusable: u64, + padding: u64, +} + +#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)] +#[repr(C)] +struct RawTableRegister { + base: u64, + limit: u64, +} + +#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)] +#[repr(C)] +struct RawSregs { + cs: RawSegmentRegister, + ds: RawSegmentRegister, + es: RawSegmentRegister, + fs: RawSegmentRegister, + gs: RawSegmentRegister, + ss: RawSegmentRegister, + tr: RawSegmentRegister, + ldt: RawSegmentRegister, + gdt: RawTableRegister, + idt: RawTableRegister, + cr0: u64, + cr2: u64, + cr3: u64, + cr4: u64, + cr8: u64, + efer: u64, + apic_base: u64, + interrupt_bitmap: [u64; 4], +} + +/// Integrity hashes for corruption detection. Not signatures: a +/// writer who can edit the file can recompute both. +/// +/// `header_hash` covers `preamble || header || sregs || blob_hash +/// || host_funcs_blob`. Always verified. +/// +/// `blob_hash` covers the memory blob and is skipped by +/// `from_file_unchecked` (the O(blob size) check). It is folded +/// into `header_hash` so a partial edit that updates only +/// `blob_hash` is still rejected by `from_file_unchecked`. +#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)] +#[repr(C)] +pub(super) struct RawHashes { + pub(super) header_hash: [u8; 32], + pub(super) blob_hash: [u8; 32], +} + +/// Total byte length of the fixed-position prefix of a V1 snapshot +/// file (preamble + header + sregs + hashes). The `bytemuck::Pod` +/// derives on the raw structs already guarantee they have no +/// padding, so this is exactly the on-disk byte count. +pub(super) const FIXED_PREFIX_SIZE: usize = std::mem::size_of::() + + std::mem::size_of::() + + std::mem::size_of::() + + std::mem::size_of::(); + +// --- Raw <-> rich conversions --- + +impl From<&SnapshotPreamble> for RawPreamble { + fn from(p: &SnapshotPreamble) -> Self { + Self { + magic: p.magic, + format_version: p.format_version as u32, + } + } +} + +impl TryFrom for SnapshotPreamble { + type Error = crate::HyperlightError; + fn try_from(raw: RawPreamble) -> crate::Result { + if &raw.magic != SNAPSHOT_MAGIC { + return Err(crate::new_error!( + "invalid snapshot file: bad magic bytes (expected {:?}, got {:?})", + SNAPSHOT_MAGIC, + raw.magic + )); + } + Ok(Self { + magic: raw.magic, + format_version: FormatVersion::from_u32(raw.format_version)?, + }) + } +} + +impl From<&SnapshotHeaderV1> for RawHeaderV1 { + fn from(h: &SnapshotHeaderV1) -> Self { + let (entrypoint_tag, entrypoint_addr) = match h.entrypoint { + NextAction::Initialise(a) => (0u64, a), + NextAction::Call(a) => (1u64, a), + #[cfg(test)] + NextAction::None => (u64::MAX, 0), + }; + let l = &h.layout; + Self { + arch: h.arch as u64, + abi_version: h.abi_version, + stack_top_gva: h.stack_top_gva, + entrypoint_tag, + entrypoint_addr, + input_data_size: l.input_data_size as u64, + output_data_size: l.output_data_size as u64, + heap_size: l.heap_size as u64, + code_size: l.code_size as u64, + init_data_size: l.init_data_size as u64, + init_data_permissions: l.init_data_permissions.map_or(0, |f| f.bits() as u64), + scratch_size: l.scratch_size as u64, + snapshot_size: l.snapshot_size as u64, + pt_size: l.pt_size.map_or(0, |v| v as u64), + memory_size: h.memory_size as u64, + memory_offset: h.memory_offset, + has_sregs: if h.has_sregs { 1 } else { 0 }, + hypervisor: h.hypervisor as u64, + host_funcs_size: h.host_funcs_size, + } + } +} + +impl TryFrom for SnapshotHeaderV1 { + type Error = crate::HyperlightError; + fn try_from(raw: RawHeaderV1) -> crate::Result { + use crate::mem::memory_region::MemoryRegionFlags; + + let arch = ArchTag::from_u64(raw.arch)?; + let entrypoint = match raw.entrypoint_tag { + 0 => NextAction::Initialise(raw.entrypoint_addr), + 1 => NextAction::Call(raw.entrypoint_addr), + _ => { + return Err(crate::new_error!( + "invalid entrypoint tag in snapshot: {}", + raw.entrypoint_tag + )); + } + }; + let init_data_permissions = if raw.init_data_permissions == 0 { + None + } else { + // Field is `u64` on disk for layout uniformity but the + // flag set is `u32`. Reject any high bits before + // narrowing so we don't silently truncate them. + let bits = u32::try_from(raw.init_data_permissions).map_err(|_| { + crate::new_error!( + "snapshot init_data_permissions ({:#x}) exceeds u32 range", + raw.init_data_permissions + ) + })?; + Some(MemoryRegionFlags::from_bits(bits).ok_or_else(|| { + crate::new_error!("snapshot contains unknown memory region flags: {:#x}", bits) + })?) + }; + let pt_size = if raw.pt_size == 0 { + None + } else { + Some(raw.pt_size as usize) + }; + let has_sregs = match raw.has_sregs { + 0 => false, + 1 => true, + other => { + return Err(crate::new_error!( + "snapshot has_sregs must be 0 or 1, got {}", + other + )); + } + }; + let hypervisor = HypervisorTag::from_u64(raw.hypervisor)?; + Ok(Self { + arch, + abi_version: raw.abi_version, + stack_top_gva: raw.stack_top_gva, + entrypoint, + layout: LayoutFields { + input_data_size: raw.input_data_size as usize, + output_data_size: raw.output_data_size as usize, + heap_size: raw.heap_size as usize, + code_size: raw.code_size as usize, + init_data_size: raw.init_data_size as usize, + init_data_permissions, + scratch_size: raw.scratch_size as usize, + snapshot_size: raw.snapshot_size as usize, + pt_size, + }, + memory_size: raw.memory_size as usize, + memory_offset: raw.memory_offset, + has_sregs, + hypervisor, + host_funcs_size: raw.host_funcs_size, + }) + } +} + +impl SnapshotHeaderV1 { + /// File-bound and environment validation: checks that a + /// well-formed header (already produced by `TryFrom`) is also + /// consistent with the actual file size and the runtime + /// environment (architecture, hypervisor, ABI version). + fn validate_against_file(&self, file_len: u64) -> crate::Result<()> { + if self.arch != ArchTag::current() { + return Err(crate::new_error!( + "snapshot architecture mismatch: expected {:?}, got {:?}", + ArchTag::current(), + self.arch + )); + } + if self.abi_version != SNAPSHOT_ABI_VERSION { + return Err(crate::new_error!( + "snapshot ABI version mismatch: file has ABI version {}, \ + but this build expects {}. The snapshot must be regenerated \ + from the guest binary.", + self.abi_version, + SNAPSHOT_ABI_VERSION + )); + } + let current_hv = HypervisorTag::current() + .ok_or_else(|| crate::new_error!("no hypervisor available to load snapshot"))?; + if self.hypervisor != current_hv { + return Err(crate::new_error!( + "snapshot hypervisor mismatch: file was created on {} but the current hypervisor is {}.", + self.hypervisor.name(), + current_hv.name() + )); + } + + if self.memory_offset == 0 || self.memory_offset % PAGE_SIZE as u64 != 0 { + return Err(crate::new_error!( + "invalid snapshot memory_offset {} (must be a non-zero multiple of PAGE_SIZE)", + self.memory_offset + )); + } + + // host_funcs region must fit between the fixed prefix and + // the page-aligned memory_offset. + if self.host_funcs_size > MAX_HOST_FUNCS_SIZE { + return Err(crate::new_error!( + "snapshot host_funcs_size ({}) exceeds maximum ({})", + self.host_funcs_size, + MAX_HOST_FUNCS_SIZE + )); + } + let after_hf = (FIXED_PREFIX_SIZE as u64) + .checked_add(self.host_funcs_size) + .ok_or_else(|| { + crate::new_error!( + "snapshot host_funcs_size ({}) overflows file offset", + self.host_funcs_size + ) + })?; + if after_hf > self.memory_offset { + return Err(crate::new_error!( + "snapshot host_funcs_size ({}) does not fit between fixed prefix and memory_offset ({})", + self.host_funcs_size, + self.memory_offset + )); + } + // host_funcs region must fit in the file too (defends + // against memory_offset being extended past the file end by + // a malicious header). + let max_host_funcs = file_len.saturating_sub(FIXED_PREFIX_SIZE as u64); + if self.host_funcs_size > max_host_funcs { + return Err(crate::new_error!( + "snapshot host_funcs_size ({}) exceeds remaining file bytes ({})", + self.host_funcs_size, + max_host_funcs + )); + } + + // Memory blob plus the trailing PAGE_SIZE guard must fit in + // the file. + let blob_end = self + .memory_offset + .checked_add(self.memory_size as u64) + .and_then(|n| n.checked_add(PAGE_SIZE as u64)) + .ok_or_else(|| crate::new_error!("snapshot memory blob bounds overflow"))?; + if blob_end > file_len { + return Err(crate::new_error!( + "snapshot memory blob extends past the end of the file (need {} bytes, file has {})", + blob_end, + file_len + )); + } + + // `entrypoint` and `has_sregs` must agree: a `Call` snapshot + // is mid-execution and therefore has a captured sregs state, + // while an `Initialise` snapshot has not yet run on the vCPU + // and has none. Anything else is a malformed header. + let call_entry = matches!(self.entrypoint, NextAction::Call(_)); + if call_entry != self.has_sregs { + return Err(crate::new_error!( + "snapshot entrypoint and has_sregs disagree: entrypoint requires sregs={}, has_sregs={}", + call_entry, + self.has_sregs + )); + } + + Ok(()) + } +} + +impl From<&CommonSpecialRegisters> for RawSregs { + fn from(s: &CommonSpecialRegisters) -> Self { + let seg = |r: &crate::hypervisor::regs::CommonSegmentRegister| RawSegmentRegister { + base: r.base, + limit: r.limit as u64, + selector: r.selector as u64, + type_: r.type_ as u64, + present: r.present as u64, + dpl: r.dpl as u64, + db: r.db as u64, + s: r.s as u64, + l: r.l as u64, + g: r.g as u64, + avl: r.avl as u64, + unusable: r.unusable as u64, + padding: r.padding as u64, + }; + let tab = |r: &crate::hypervisor::regs::CommonTableRegister| RawTableRegister { + base: r.base, + limit: r.limit as u64, + }; + Self { + cs: seg(&s.cs), + ds: seg(&s.ds), + es: seg(&s.es), + fs: seg(&s.fs), + gs: seg(&s.gs), + ss: seg(&s.ss), + tr: seg(&s.tr), + ldt: seg(&s.ldt), + gdt: tab(&s.gdt), + idt: tab(&s.idt), + cr0: s.cr0, + cr2: s.cr2, + cr3: s.cr3, + cr4: s.cr4, + cr8: s.cr8, + efer: s.efer, + apic_base: s.apic_base, + interrupt_bitmap: s.interrupt_bitmap, + } + } +} + +impl From for CommonSpecialRegisters { + fn from(r: RawSregs) -> Self { + use crate::hypervisor::regs::{CommonSegmentRegister, CommonTableRegister}; + // Truncating casts are intentional and lossless on + // well-formed input: the original fields have those widths + // and were widened to u64 only for on-disk uniformity. + let seg = |s: RawSegmentRegister| CommonSegmentRegister { + base: s.base, + limit: s.limit as u32, + selector: s.selector as u16, + type_: s.type_ as u8, + present: s.present as u8, + dpl: s.dpl as u8, + db: s.db as u8, + s: s.s as u8, + l: s.l as u8, + g: s.g as u8, + avl: s.avl as u8, + unusable: s.unusable as u8, + padding: s.padding as u8, + }; + let tab = |t: RawTableRegister| CommonTableRegister { + base: t.base, + limit: t.limit as u16, + }; + Self { + cs: seg(r.cs), + ds: seg(r.ds), + es: seg(r.es), + fs: seg(r.fs), + gs: seg(r.gs), + ss: seg(r.ss), + tr: seg(r.tr), + ldt: seg(r.ldt), + gdt: tab(r.gdt), + idt: tab(r.idt), + cr0: r.cr0, + cr2: r.cr2, + cr3: r.cr3, + cr4: r.cr4, + cr8: r.cr8, + efer: r.efer, + apic_base: r.apic_base, + interrupt_bitmap: r.interrupt_bitmap, + } + } +} + +impl Snapshot { + /// Save this snapshot to a file on disk. + /// + /// The file format uses a page-aligned memory blob that can be + /// mmapped directly on load for zero-copy instantiation. + /// + /// If a file already exists at `path`, it is truncated and + /// overwritten. + /// + /// # Portability + /// + /// Snapshot files are **not portable** across CPU architectures, + /// hypervisors, or operating systems. All three are checked at + /// load time and a mismatch produces an error. + pub fn to_file(&self, path: impl AsRef) -> crate::Result<()> { + use std::io::{BufWriter, Write}; + + let file = std::fs::File::create(path.as_ref()) + .map_err(|e| crate::new_error!("failed to create snapshot file: {}", e))?; + let mut w = BufWriter::new(file); + + let layout = &self.layout; + + // Serialize host-function metadata up-front so we can compute + // `memory_offset` (which depends on `host_funcs_size`) before + // writing the header. + let host_funcs_bytes: Vec = if self + .host_functions + .host_functions + .as_ref() + .is_some_and(|v| !v.is_empty()) + { + (&self.host_functions).try_into().map_err(|e| { + crate::new_error!("failed to serialize host function details: {:?}", e) + })? + } else { + Vec::new() + }; + + // The memory blob sits immediately after the host-function + // blob, page-aligned. With no host functions this lands at + // exactly PAGE_SIZE. + let memory_offset = + (FIXED_PREFIX_SIZE + host_funcs_bytes.len()).next_multiple_of(PAGE_SIZE) as u64; + + let preamble = SnapshotPreamble { + magic: *SNAPSHOT_MAGIC, + format_version: FormatVersion::V1, + }; + let v1 = SnapshotHeaderV1 { + arch: ArchTag::current(), + abi_version: SNAPSHOT_ABI_VERSION, + stack_top_gva: self.stack_top_gva, + entrypoint: self.entrypoint, + layout: LayoutFields { + input_data_size: layout.input_data_size, + output_data_size: layout.output_data_size, + heap_size: layout.heap_size, + code_size: layout.code_size, + init_data_size: layout.init_data_size, + init_data_permissions: layout.init_data_permissions, + scratch_size: layout.get_scratch_size(), + snapshot_size: layout.snapshot_size, + pt_size: layout.pt_size, + }, + memory_size: self.memory.mem_size(), + memory_offset, + has_sregs: self.sregs.is_some(), + hypervisor: HypervisorTag::current() + .ok_or_else(|| crate::new_error!("no hypervisor available to tag snapshot"))?, + host_funcs_size: host_funcs_bytes.len() as u64, + }; + let sregs = self.sregs.unwrap_or_default(); + + let raw_preamble = RawPreamble::from(&preamble); + let raw_header = RawHeaderV1::from(&v1); + let raw_sregs = RawSregs::from(&sregs); + + // Corruption-detection hashes (not signatures). `blob_hash` + // is folded into `header_hash` so the unchecked loader + // catches partial edits that only update `blob_hash`. + let blob_hash: [u8; 32] = blake3::hash(self.memory.as_slice()).into(); + let mut hasher = blake3::Hasher::new(); + hasher.update(bytemuck::bytes_of(&raw_preamble)); + hasher.update(bytemuck::bytes_of(&raw_header)); + hasher.update(bytemuck::bytes_of(&raw_sregs)); + hasher.update(&blob_hash); + hasher.update(&host_funcs_bytes); + let header_hash: [u8; 32] = hasher.finalize().into(); + let raw_hashes = RawHashes { + header_hash, + blob_hash, + }; + + w.write_all(bytemuck::bytes_of(&raw_preamble)) + .map_err(|e| crate::new_error!("snapshot write error: {}", e))?; + w.write_all(bytemuck::bytes_of(&raw_header)) + .map_err(|e| crate::new_error!("snapshot write error: {}", e))?; + w.write_all(bytemuck::bytes_of(&raw_sregs)) + .map_err(|e| crate::new_error!("snapshot write error: {}", e))?; + w.write_all(bytemuck::bytes_of(&raw_hashes)) + .map_err(|e| crate::new_error!("snapshot write error: {}", e))?; + + // Host function metadata (variable length, not mmapped). + if !host_funcs_bytes.is_empty() { + w.write_all(&host_funcs_bytes) + .map_err(|e| crate::new_error!("snapshot write error: {}", e))?; + } + + // Zero-pad up to the page-aligned memory_offset so the blob + // is mmap-aligned in the file. Padding is always less than + // `PAGE_SIZE`. + let pre_blob_pos = FIXED_PREFIX_SIZE + host_funcs_bytes.len(); + let pad_len = memory_offset as usize - pre_blob_pos; + debug_assert!(pad_len < PAGE_SIZE); + w.write_all(&[0u8; PAGE_SIZE][..pad_len]) + .map_err(|e| crate::new_error!("snapshot write error: {}", e))?; + + w.write_all(self.memory.as_slice()) + .map_err(|e| crate::new_error!("snapshot write error: {}", e))?; + + // Trailing PAGE_SIZE padding: Windows read-only file mappings + // cannot extend beyond the file's actual size, so the file must + // contain backing bytes for the trailing guard page used by + // ReadonlySharedMemory::from_file_windows. Linux ignores this + // padding (its guard pages come from an anonymous mmap reservation). + w.write_all(&[0u8; PAGE_SIZE]) + .map_err(|e| crate::new_error!("snapshot write error: {}", e))?; + + w.flush() + .map_err(|e| crate::new_error!("snapshot write error: {}", e))?; + + Ok(()) + } + + /// Load a snapshot from a file on disk. + /// + /// The memory blob is mapped directly from the file for zero-copy + /// loading using platform-specific CoW mechanisms. + /// + /// Returns an error if the file is from a different CPU + /// architecture, hypervisor, or OS than this host. See + /// [`Snapshot::to_file`] for the full portability story. + /// + /// Note: ELF unwind info (`LoadInfo`) is not persisted in the + /// snapshot file, so the `mem_profile` feature will not have + /// accurate profiling data for sandboxes created from disk + /// snapshots. + /// + /// # File-mutation hazard + /// + /// The file at `path` must not be modified, truncated, renamed + /// over, or deleted while the returned `Snapshot` (or any + /// [`MultiUseSandbox`](crate::MultiUseSandbox) constructed from + /// it) is still alive. + pub fn from_file(path: impl AsRef) -> crate::Result { + Self::from_file_impl(path, true) + } + + /// Load a snapshot from a file on disk without verifying the + /// memory blob's content hash. The fixed-prefix integrity check + /// (preamble + header + sregs + host_funcs) is still performed. + /// + /// This is faster for large snapshots in trusted environments + /// where blob integrity is guaranteed by other means. All other + /// portability checks (architecture, hypervisor, OS) still + /// apply. See [`Snapshot::to_file`] for details. + /// + /// # File-mutation hazard + /// + /// The file at `path` must not be modified, truncated, renamed + /// over, or deleted while the returned `Snapshot` (or any + /// [`MultiUseSandbox`](crate::MultiUseSandbox) constructed from + /// it) is still alive. + pub fn from_file_unchecked(path: impl AsRef) -> crate::Result { + Self::from_file_impl(path, false) + } + + fn from_file_impl( + path: impl AsRef, + verify_blob_hash: bool, + ) -> crate::Result { + use std::io::BufReader; + + let file = std::fs::File::open(path.as_ref()) + .map_err(|e| crate::new_error!("failed to open snapshot file: {}", e))?; + let file_len = file + .metadata() + .map_err(|e| crate::new_error!("snapshot stat error: {}", e))? + .len(); + let mut r = BufReader::new(&file); + + // Phase 1: read raw bytes into POD structs. + use std::io::Read; + let mut preamble_buf = [0u8; std::mem::size_of::()]; + r.read_exact(&mut preamble_buf) + .map_err(|e| crate::new_error!("snapshot read error: {}", e))?; + let raw_preamble: RawPreamble = bytemuck::pod_read_unaligned(&preamble_buf); + // Validate magic + format version. Future format versions + // would dispatch here on `preamble.format_version`. + let preamble = SnapshotPreamble::try_from(raw_preamble)?; + let mut header_buf = [0u8; std::mem::size_of::()]; + let raw_v1: RawHeaderV1 = match preamble.format_version { + FormatVersion::V1 => { + r.read_exact(&mut header_buf) + .map_err(|e| crate::new_error!("snapshot read error: {}", e))?; + bytemuck::pod_read_unaligned(&header_buf) + } + }; + let mut sregs_buf = [0u8; std::mem::size_of::()]; + r.read_exact(&mut sregs_buf) + .map_err(|e| crate::new_error!("snapshot read error: {}", e))?; + let raw_sregs: RawSregs = bytemuck::pod_read_unaligned(&sregs_buf); + + let mut hashes_buf = [0u8; std::mem::size_of::()]; + r.read_exact(&mut hashes_buf) + .map_err(|e| crate::new_error!("snapshot read error: {}", e))?; + let hashes: RawHashes = bytemuck::pod_read_unaligned(&hashes_buf); + + // Phase 2: parse + validate against the file size and the + // current runtime environment. + let hdr = SnapshotHeaderV1::try_from(raw_v1)?; + hdr.validate_against_file(file_len)?; + + // Read the optional host-function-details blob into a + // buffer. It is needed both for `header_hash` verification + // and for the flatbuffer parse below. + let mut host_funcs_buf = vec![0u8; hdr.host_funcs_size as usize]; + if !host_funcs_buf.is_empty() { + r.read_exact(&mut host_funcs_buf) + .map_err(|e| crate::new_error!("snapshot read error: {}", e))?; + } + + // Phase 3: always-verified `header_hash` over preamble || + // header || sregs || blob_hash || host_funcs. + { + let mut hasher = blake3::Hasher::new(); + hasher.update(&preamble_buf); + hasher.update(&header_buf); + hasher.update(&sregs_buf); + hasher.update(&hashes.blob_hash); + hasher.update(&host_funcs_buf); + let computed: [u8; 32] = hasher.finalize().into(); + if computed != hashes.header_hash { + return Err(crate::new_error!( + "snapshot header_hash mismatch: file may be corrupted" + )); + } + } + + // Reconstruct layout + let l = &hdr.layout; + let mut cfg = crate::sandbox::SandboxConfiguration::default(); + cfg.set_input_data_size(l.input_data_size); + cfg.set_output_data_size(l.output_data_size); + cfg.set_heap_size(l.heap_size as u64); + cfg.set_scratch_size(l.scratch_size); + let mut layout = + SandboxMemoryLayout::new(cfg, l.code_size, l.init_data_size, l.init_data_permissions)?; + // Order matters: `set_pt_size` recomputes `snapshot_size` + // internally, so call it before `set_snapshot_size` so the + // explicit on-disk value is the one that ends up in `layout`. + if let Some(pt) = l.pt_size { + layout.set_pt_size(pt)?; + } + layout.set_snapshot_size(l.snapshot_size); + + let sregs = if hdr.has_sregs { + Some(CommonSpecialRegisters::from(raw_sregs)) + } else { + None + }; + + let host_functions = if !host_funcs_buf.is_empty() { + HostFunctionDetails::try_from(host_funcs_buf.as_slice()) + .map_err(|e| crate::new_error!("failed to parse host function details: {:?}", e))? + } else { + HostFunctionDetails { + host_functions: None, + } + }; + + // Map the memory blob directly from the file (zero-copy CoW). + // When the blob contains a PT tail (memory_size > snapshot_size), + // only snapshot_size bytes should be mapped into guest PA space. + let guest_mapped_size = if hdr.memory_size > layout.snapshot_size { + Some(layout.snapshot_size) + } else { + None + }; + let memory = ReadonlySharedMemory::from_file( + &file, + hdr.memory_offset.try_into().map_err(|_| { + crate::new_error!( + "snapshot memory_offset {} exceeds usize range", + hdr.memory_offset + ) + })?, + hdr.memory_size, + guest_mapped_size, + )?; + + // Phase 4: verify the memory blob's hash. Skipped by + // `from_file_unchecked` since this is the expensive check + // (proportional to blob size). + if verify_blob_hash { + let computed: [u8; 32] = blake3::hash(memory.as_slice()).into(); + if computed != hashes.blob_hash { + return Err(crate::new_error!( + "snapshot hash mismatch: file may be corrupted" + )); + } + } + + Ok(Snapshot { + sandbox_id: SANDBOX_CONFIGURATION_COUNTER + .fetch_add(1, std::sync::atomic::Ordering::Relaxed), + layout, + memory, + regions: Vec::new(), + load_info: crate::mem::exe::LoadInfo::dummy(), + // In-memory `Snapshot::hash` is `blake3(memory)` (matches + // `Snapshot::new`/`Snapshot::from_env`), used as the + // `PartialEq` key. This is the on-disk `blob_hash`. + hash: hashes.blob_hash, + stack_top_gva: hdr.stack_top_gva, + sregs, + entrypoint: hdr.entrypoint, + snapshot_generation: 0, + host_functions, + }) + } +} diff --git a/src/hyperlight_host/src/sandbox/snapshot/mod.rs b/src/hyperlight_host/src/sandbox/snapshot/mod.rs index b37b7f361..1bb183ea8 100644 --- a/src/hyperlight_host/src/sandbox/snapshot/mod.rs +++ b/src/hyperlight_host/src/sandbox/snapshot/mod.rs @@ -14,6 +14,9 @@ See the License for the specific language governing permissions and limitations under the License. */ +mod file; +mod file_tests; + use std::collections::{BTreeMap, HashMap}; use std::sync::atomic::{AtomicU64, Ordering}; From 9e0334c2afa508cc71894e4f8f4705cdd01bc3bc Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Fri, 1 May 2026 16:01:13 -0700 Subject: [PATCH 12/15] Add tests for snapshot file format Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- .../src/sandbox/snapshot/file_tests.rs | 1963 +++++++++++++++++ 1 file changed, 1963 insertions(+) create mode 100644 src/hyperlight_host/src/sandbox/snapshot/file_tests.rs diff --git a/src/hyperlight_host/src/sandbox/snapshot/file_tests.rs b/src/hyperlight_host/src/sandbox/snapshot/file_tests.rs new file mode 100644 index 000000000..5778d43f5 --- /dev/null +++ b/src/hyperlight_host/src/sandbox/snapshot/file_tests.rs @@ -0,0 +1,1963 @@ +/* +Copyright 2025 The Hyperlight Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +//! Tests for the snapshot file format (`super::file`). + +#![cfg(test)] + +use std::sync::Arc; + +use hyperlight_testing::simple_guest_as_string; + +use super::file::{FIXED_PREFIX_SIZE, HypervisorTag, RawHashes, RawHeaderV1, RawPreamble}; +use crate::sandbox::snapshot::Snapshot; +use crate::{GuestBinary, HostFunctions, MultiUseSandbox, UninitializedSandbox}; + +/// Absolute file offset of a `RawHeaderV1` field. Computed from +/// the struct definition so it stays correct if the field order +/// changes. +macro_rules! v1_offset { + ($field:ident) => { + std::mem::size_of::() + std::mem::offset_of!(RawHeaderV1, $field) + }; +} + +fn create_test_sandbox() -> MultiUseSandbox { + let path = simple_guest_as_string().unwrap(); + UninitializedSandbox::new(GuestBinary::FilePath(path), None) + .unwrap() + .evolve() + .unwrap() +} + +fn create_snapshot_from_binary() -> Snapshot { + let path = simple_guest_as_string().unwrap(); + Snapshot::from_env( + GuestBinary::FilePath(path), + crate::sandbox::SandboxConfiguration::default(), + ) + .unwrap() +} + +#[test] +fn from_snapshot_already_initialized_in_memory() { + // Test from_snapshot with a snapshot taken from an already-initialized + // sandbox (NextAction::Call), directly from memory without file I/O + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + + let new_snap = Snapshot { + sandbox_id: super::SANDBOX_CONFIGURATION_COUNTER + .fetch_add(1, std::sync::atomic::Ordering::Relaxed), + layout: *snapshot.layout(), + memory: snapshot.memory().clone(), + regions: snapshot.regions().to_vec(), + load_info: snapshot.load_info(), + hash: snapshot.hash, + stack_top_gva: snapshot.stack_top_gva(), + sregs: snapshot.sregs().cloned(), + entrypoint: snapshot.entrypoint(), + snapshot_generation: snapshot.snapshot_generation(), + host_functions: snapshot.host_functions.clone(), + }; + + let mut sbox2 = + MultiUseSandbox::from_snapshot(Arc::new(new_snap), HostFunctions::default(), None).unwrap(); + let result: i32 = sbox2.call("GetStatic", ()).unwrap(); + assert_eq!(result, 0); +} + +#[test] +fn from_snapshot_in_memory() { + // Test from_snapshot pathway using the existing Snapshot::from_env + let path = simple_guest_as_string().unwrap(); + let snap = Snapshot::from_env( + GuestBinary::FilePath(path), + crate::sandbox::SandboxConfiguration::default(), + ) + .unwrap(); + + let mut sbox = + MultiUseSandbox::from_snapshot(Arc::new(snap), HostFunctions::default(), None).unwrap(); + + // from_env creates a snapshot with NextAction::Initialise, + // so from_snapshot will run the init code via vm.initialise() + let result: i32 = sbox.call("GetStatic", ()).unwrap(); + assert_eq!(result, 0); +} + +#[test] +fn round_trip_save_load_call() { + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("test.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded = Snapshot::from_file(&snap_path).unwrap(); + let mut sbox2 = + MultiUseSandbox::from_snapshot(Arc::new(loaded), HostFunctions::default(), None).unwrap(); + + let result: String = sbox2.call("Echo", "hello\n".to_string()).unwrap(); + assert_eq!(result, "hello\n"); +} + +#[test] +fn snapshot_and_pt_size_round_trip() { + // Running-sandbox snapshot. + let mut sbox = create_test_sandbox(); + let snap = sbox.snapshot().unwrap(); + let original_snapshot_size = snap.layout().snapshot_size; + let original_pt_size = snap.layout().pt_size; + + let dir = tempfile::tempdir().unwrap(); + let path = dir.path().join("running.hls"); + snap.to_file(&path).unwrap(); + + let loaded = Snapshot::from_file(&path).unwrap(); + assert_eq!(loaded.layout().snapshot_size, original_snapshot_size); + assert_eq!(loaded.layout().pt_size, original_pt_size); + + // Pre-init snapshot. + let preinit = create_snapshot_from_binary(); + let preinit_snapshot_size = preinit.layout().snapshot_size; + let preinit_pt_size = preinit.layout().pt_size; + + let path = dir.path().join("preinit.hls"); + preinit.to_file(&path).unwrap(); + + let loaded = Snapshot::from_file(&path).unwrap(); + assert_eq!(loaded.layout().snapshot_size, preinit_snapshot_size); + assert_eq!(loaded.layout().pt_size, preinit_pt_size); +} + +#[test] +fn hash_verification_detects_corruption() { + let snapshot = create_snapshot_from_binary(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("corrupted.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // Corrupt a byte in the memory blob (after the 4096-byte header) + { + use std::io::{Read, Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .read(true) + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(4096 + 100)).unwrap(); + let mut byte = [0u8; 1]; + file.read_exact(&mut byte).unwrap(); + byte[0] ^= 0xFF; + file.seek(SeekFrom::Start(4096 + 100)).unwrap(); + file.write_all(&byte).unwrap(); + } + + let result = Snapshot::from_file(&snap_path); + let err_msg = match result { + Err(e) => format!("{}", e), + Ok(_) => panic!("expected load to fail with hash mismatch"), + }; + assert!( + err_msg.contains("hash mismatch"), + "expected hash mismatch error, got: {}", + err_msg + ); +} + +#[test] +fn arch_mismatch_rejected() { + let snapshot = create_snapshot_from_binary(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("wrong_arch.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // Overwrite the architecture tag + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(v1_offset!(arch) as u64)).unwrap(); + file.write_all(&99u32.to_le_bytes()).unwrap(); + } + + let result = Snapshot::from_file(&snap_path); + let err_msg = match result { + Err(e) => format!("{}", e), + Ok(_) => panic!("expected load to fail with arch mismatch"), + }; + assert!( + err_msg.contains("architecture"), + "expected arch-related error, got: {}", + err_msg + ); +} + +#[test] +fn format_version_mismatch_rejected() { + let snapshot = create_snapshot_from_binary(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("wrong_version.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // Overwrite the format version + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start( + std::mem::offset_of!(RawPreamble, format_version) as u64, + )) + .unwrap(); + file.write_all(&999u32.to_le_bytes()).unwrap(); + } + + let result = Snapshot::from_file(&snap_path); + let err_msg = match result { + Err(e) => format!("{}", e), + Ok(_) => panic!("expected load to fail with version mismatch"), + }; + assert!( + err_msg.contains("format version"), + "expected version mismatch error, got: {}", + err_msg + ); + assert!( + err_msg.contains("convertible"), + "expected hint about convertibility, got: {}", + err_msg + ); +} + +#[test] +fn abi_version_mismatch_rejected() { + let snapshot = create_snapshot_from_binary(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("wrong_abi.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // Overwrite the ABI version + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(v1_offset!(abi_version) as u64)) + .unwrap(); + file.write_all(&999u32.to_le_bytes()).unwrap(); + } + + let result = Snapshot::from_file(&snap_path); + let err_msg = match result { + Err(e) => format!("{}", e), + Ok(_) => panic!("expected load to fail with ABI version mismatch"), + }; + assert!( + err_msg.contains("ABI version mismatch"), + "expected ABI version mismatch error, got: {}", + err_msg + ); + assert!( + err_msg.contains("regenerated"), + "expected hint about regeneration, got: {}", + err_msg + ); +} + +#[test] +fn hypervisor_mismatch_rejected() { + let snapshot = create_snapshot_from_binary(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("wrong_hv.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // Overwrite the hypervisor tag with a valid but wrong tag. + let current = HypervisorTag::current().unwrap(); + let wrong_tag = match current { + HypervisorTag::Whp => HypervisorTag::Kvm, + _ => HypervisorTag::Whp, + }; + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(v1_offset!(hypervisor) as u64)) + .unwrap(); + file.write_all(&(wrong_tag as u64).to_le_bytes()).unwrap(); + } + + let result = Snapshot::from_file(&snap_path); + let err_msg = match result { + Err(e) => format!("{}", e), + Ok(_) => panic!("expected load to fail with hypervisor mismatch"), + }; + assert!( + err_msg.contains("hypervisor mismatch"), + "expected hypervisor mismatch error, got: {}", + err_msg + ); +} + +#[test] +fn restore_from_loaded_snapshot() { + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("restore.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded = Snapshot::from_file(&snap_path).unwrap(); + let mut sbox = + MultiUseSandbox::from_snapshot(Arc::new(loaded), HostFunctions::default(), None).unwrap(); + + // Mutate state + sbox.call::("AddToStatic", 42i32).unwrap(); + let val: i32 = sbox.call("GetStatic", ()).unwrap(); + assert_eq!(val, 42); + + // Take a new snapshot and restore to it + let snap2 = sbox.snapshot().unwrap(); + sbox.call::("AddToStatic", 10i32).unwrap(); + let val: i32 = sbox.call("GetStatic", ()).unwrap(); + assert_eq!(val, 52); + + sbox.restore(snap2).unwrap(); + let val: i32 = sbox.call("GetStatic", ()).unwrap(); + assert_eq!(val, 42); +} + +#[test] +fn restore_to_original_file_snapshot() { + let mut sbox = create_test_sandbox(); + sbox.call::("AddToStatic", 10i32).unwrap(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("original.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded = Arc::new(Snapshot::from_file(&snap_path).unwrap()); + let mut sbox = + MultiUseSandbox::from_snapshot(loaded.clone(), HostFunctions::default(), None).unwrap(); + + sbox.call::("AddToStatic", 42i32).unwrap(); + let val: i32 = sbox.call("GetStatic", ()).unwrap(); + assert_eq!(val, 52); + + sbox.restore(loaded).unwrap(); + let val: i32 = sbox.call("GetStatic", ()).unwrap(); + assert_eq!(val, 10); +} + +/// Sandboxes built from clones of the same `Arc` must +/// be mutually `restore`-compatible (they share the same +/// `sandbox_id`). Conversely, two `Snapshot::from_file` calls of +/// the same path return distinct snapshots; that property is +/// exercised by `restore_to_different_file_loaded_snapshot_rejected`. +#[test] +fn sandboxes_from_shared_arc_snapshot_can_restore_to_each_other() { + let mut producer = create_test_sandbox(); + let snapshot = producer.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("shared_id.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded = Arc::new(Snapshot::from_file(&snap_path).unwrap()); + let mut sbox1 = + MultiUseSandbox::from_snapshot(loaded.clone(), HostFunctions::default(), None).unwrap(); + + // Take an in-process snapshot from one sibling. That snapshot + // inherits its sandbox's id, which must match every other sandbox + // built from the same `Arc`. + sbox1.call::("AddToStatic", 7i32).unwrap(); + let mid_snap = sbox1.snapshot().unwrap(); + + let mut sbox2 = MultiUseSandbox::from_snapshot(loaded, HostFunctions::default(), None).unwrap(); + // Restoring `sbox2` to a snapshot taken from `sbox1` must + // succeed because they share the same id. + sbox2.restore(mid_snap).unwrap(); + assert_eq!(sbox2.call::("GetStatic", ()).unwrap(), 7); +} + +/// A single `Arc` loaded from disk must be safely shared +/// across many `from_snapshot` calls. Each resulting sandbox gets +/// its own CoW view and must be independent of the others. +#[test] +fn many_sandboxes_share_single_arc_snapshot() { + const N: usize = 8; + + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("shared_arc.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded = Arc::new(Snapshot::from_file(&snap_path).unwrap()); + + let mut sandboxes: Vec = (0..N) + .map(|_| { + MultiUseSandbox::from_snapshot(loaded.clone(), HostFunctions::default(), None).unwrap() + }) + .collect(); + + // Each sandbox writes a unique value and must observe its own write. + for (i, sbox) in sandboxes.iter_mut().enumerate() { + sbox.call::("AddToStatic", (i as i32 + 1) * 10) + .unwrap(); + } + for (i, sbox) in sandboxes.iter_mut().enumerate() { + let val: i32 = sbox.call("GetStatic", ()).unwrap(); + assert_eq!( + val, + (i as i32 + 1) * 10, + "sandbox {i} must observe its own write", + ); + } + + // Dropping the original Arc while sandboxes are still + // alive must not invalidate their CoW mappings. + drop(loaded); + for (i, sbox) in sandboxes.iter_mut().enumerate() { + let val: i32 = sbox.call("GetStatic", ()).unwrap(); + assert_eq!( + val, + (i as i32 + 1) * 10, + "sandbox {i} must still work after the source Arc is dropped", + ); + } +} + +/// Multiple sandboxes built from the same on-disk snapshot must +/// behave correctly under concurrent use from multiple threads. +#[test] +fn concurrent_sandboxes_from_same_file() { + use std::thread; + + const N: usize = 8; + + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("concurrent.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded = Arc::new(Snapshot::from_file(&snap_path).unwrap()); + + let handles: Vec<_> = (0..N) + .map(|i| { + let loaded = loaded.clone(); + thread::spawn(move || { + let mut sbox = + MultiUseSandbox::from_snapshot(loaded, HostFunctions::default(), None).unwrap(); + let increment = (i as i32 + 1) * 7; + for _ in 0..5 { + sbox.call::("AddToStatic", increment).unwrap(); + } + let final_val: i32 = sbox.call("GetStatic", ()).unwrap(); + assert_eq!( + final_val, + increment * 5, + "thread {i} must see its own writes" + ); + }) + }) + .collect(); + + for h in handles { + h.join().expect("thread panicked"); + } +} + +/// Snapshots loaded from the same file must be restorable +/// independently from each other after concurrent mutations. +#[test] +fn restore_works_per_sandbox_with_shared_file() { + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("restore_shared.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded = Arc::new(Snapshot::from_file(&snap_path).unwrap()); + + let mut sbox1 = + MultiUseSandbox::from_snapshot(loaded.clone(), HostFunctions::default(), None).unwrap(); + let mut sbox2 = + MultiUseSandbox::from_snapshot(loaded.clone(), HostFunctions::default(), None).unwrap(); + + sbox1.call::("AddToStatic", 100i32).unwrap(); + sbox2.call::("AddToStatic", 200i32).unwrap(); + + sbox1.restore(loaded.clone()).unwrap(); + assert_eq!(sbox1.call::("GetStatic", ()).unwrap(), 0); + // sbox2 must be unaffected by sbox1's restore. + assert_eq!(sbox2.call::("GetStatic", ()).unwrap(), 200); + + sbox2.restore(loaded).unwrap(); + assert_eq!(sbox2.call::("GetStatic", ()).unwrap(), 0); +} + +/// Pre-init snapshots (NextAction::Initialise) round-tripped through +/// a file must be usable concurrently by multiple sandboxes. This is +/// distinct from already-initialised (`Call`) snapshots because each +/// sandbox runs the guest init code under `vm.initialise()`. +#[test] +fn multiple_sandboxes_from_pre_init_file() { + let snapshot = create_snapshot_from_binary(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("preinit_shared.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded = Arc::new(Snapshot::from_file(&snap_path).unwrap()); + + let mut sbox1 = + MultiUseSandbox::from_snapshot(loaded.clone(), HostFunctions::default(), None).unwrap(); + let mut sbox2 = MultiUseSandbox::from_snapshot(loaded, HostFunctions::default(), None).unwrap(); + + sbox1.call::("AddToStatic", 11i32).unwrap(); + assert_eq!(sbox1.call::("GetStatic", ()).unwrap(), 11); + assert_eq!(sbox2.call::("GetStatic", ()).unwrap(), 0); + + sbox2.call::("AddToStatic", 22i32).unwrap(); + assert_eq!(sbox2.call::("GetStatic", ()).unwrap(), 22); + assert_eq!(sbox1.call::("GetStatic", ()).unwrap(), 11); +} + +#[test] +fn snapshot_then_save_round_trip() { + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path1 = dir.path().join("first.hls"); + snapshot.to_file(&snap_path1).unwrap(); + + // Load, create sandbox, mutate, take snapshot, save again + let loaded = Snapshot::from_file(&snap_path1).unwrap(); + let mut sbox2 = + MultiUseSandbox::from_snapshot(Arc::new(loaded), HostFunctions::default(), None).unwrap(); + + sbox2.call::("AddToStatic", 77i32).unwrap(); + let snap2 = sbox2.snapshot().unwrap(); + + let snap_path2 = dir.path().join("second.hls"); + snap2.to_file(&snap_path2).unwrap(); + + // Load the second snapshot and verify mutated state + let loaded2 = Snapshot::from_file(&snap_path2).unwrap(); + let mut sbox3 = + MultiUseSandbox::from_snapshot(Arc::new(loaded2), HostFunctions::default(), None).unwrap(); + + let val: i32 = sbox3.call("GetStatic", ()).unwrap(); + assert_eq!(val, 77); +} + +/// `MultiUseSandbox::from_snapshot` should register the default +/// `HostPrint` host function, just like the regular codepath. +#[test] +fn from_snapshot_has_default_host_print() { + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("test.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded = Snapshot::from_file(&snap_path).unwrap(); + let mut sbox2 = + MultiUseSandbox::from_snapshot(Arc::new(loaded), HostFunctions::default(), None).unwrap(); + + let result = sbox2.call::("PrintOutput", "hello from snapshot".to_string()); + assert!( + result.is_ok(), + "PrintOutput should succeed because HostPrint is registered by from_snapshot: {:?}", + result.unwrap_err() + ); +} + +#[test] +fn from_file_unchecked_skips_hash_verification() { + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("unchecked.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // Corrupt a byte in the memory blob (past the header) + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + // Write garbage into the memory blob region + file.seek(SeekFrom::Start(4096 + 64)).unwrap(); + file.write_all(&[0xFF; 16]).unwrap(); + } + + // from_file (with hash check) should fail + let result = Snapshot::from_file(&snap_path); + assert!(result.is_err(), "from_file should detect corruption"); + + // from_file_unchecked should succeed despite corruption + let loaded = Snapshot::from_file_unchecked(&snap_path); + assert!(loaded.is_ok(), "from_file_unchecked should skip hash check"); +} + +/// Sandbox built with a custom host function — a snapshot taken +/// from it must persist the function's signature, and loading +/// requires the same function to be registered. +fn create_sandbox_with_custom_host_funcs() -> MultiUseSandbox { + use crate::func::Registerable; + let path = simple_guest_as_string().unwrap(); + let mut u = UninitializedSandbox::new(GuestBinary::FilePath(path), None).unwrap(); + u.register_host_function("Add", |a: i32, b: i32| Ok(a + b)) + .unwrap(); + u.evolve().unwrap() +} + +#[test] +fn from_snapshot_accepts_matching_host_functions() { + use crate::func::Registerable; + + let mut sbox = create_sandbox_with_custom_host_funcs(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("with_funcs.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded = Snapshot::from_file(&snap_path).unwrap(); + let mut funcs = HostFunctions::default(); + funcs + .register_host_function("Add", |a: i32, b: i32| Ok(a + b)) + .unwrap(); + let result = MultiUseSandbox::from_snapshot(Arc::new(loaded), funcs, None); + assert!( + result.is_ok(), + "from_snapshot should accept matching host fns: {:?}", + result.err() + ); +} + +#[test] +fn from_snapshot_rejects_missing_host_function() { + let mut sbox = create_sandbox_with_custom_host_funcs(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("missing_fn.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded = Snapshot::from_file(&snap_path).unwrap(); + // Don't register "Add" — only the default HostPrint. + let result = MultiUseSandbox::from_snapshot(Arc::new(loaded), HostFunctions::default(), None); + let err = result.expect_err("expected missing-fn rejection"); + let msg = format!("{}", err); + assert!( + msg.contains("missing") && msg.contains("Add"), + "unexpected error message: {}", + msg + ); +} + +#[test] +fn from_snapshot_rejects_signature_mismatch() { + use crate::func::Registerable; + + let mut sbox = create_sandbox_with_custom_host_funcs(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("sig_mismatch.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded = Snapshot::from_file(&snap_path).unwrap(); + let mut funcs = HostFunctions::default(); + // Wrong signature: snapshot has (i32, i32) -> i32, register (String) -> i32. + funcs + .register_host_function("Add", |_s: String| Ok(0i32)) + .unwrap(); + let result = MultiUseSandbox::from_snapshot(Arc::new(loaded), funcs, None); + let err = result.expect_err("expected signature mismatch"); + let msg = format!("{}", err); + assert!( + msg.contains("signature_mismatches") && msg.contains("Add"), + "unexpected error message: {}", + msg + ); +} + +#[test] +fn from_snapshot_allows_extra_host_functions() { + use crate::func::Registerable; + + let mut sbox = create_sandbox_with_custom_host_funcs(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("extra_funcs.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded = Snapshot::from_file(&snap_path).unwrap(); + let mut funcs = HostFunctions::default(); + funcs + .register_host_function("Add", |a: i32, b: i32| Ok(a + b)) + .unwrap(); + // Extra functions not in the snapshot — superset is allowed. + funcs + .register_host_function("Extra", |x: i64| Ok(x * 2)) + .unwrap(); + let result = MultiUseSandbox::from_snapshot(Arc::new(loaded), funcs, None); + assert!( + result.is_ok(), + "extras should be allowed (superset semantics): {:?}", + result.err() + ); +} + +/// Register enough host functions on the sandbox that the +/// serialized `HostFunctionDetails` flatbuffer exceeds a single +/// page, exercising the variable-`memory_offset` path. Verifies +/// that the saved file round-trips cleanly and that +/// `from_snapshot` correctly accepts a matching set. +#[test] +fn from_snapshot_with_many_host_functions_round_trip() { + use hyperlight_common::vmem::PAGE_SIZE; + + use crate::func::Registerable; + + let path = simple_guest_as_string().unwrap(); + let mut u = UninitializedSandbox::new(GuestBinary::FilePath(path), None).unwrap(); + // Register many host functions with long names so the + // serialized flatbuffer comfortably exceeds PAGE_SIZE. + const N: usize = 200; + for i in 0..N { + let name = format!("HostFunc_with_a_reasonably_long_name_{:04}", i); + u.register_host_function(&name, |a: i32, b: i32| Ok(a + b)) + .unwrap(); + } + let mut sbox = u.evolve().unwrap(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("many_funcs.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // Sanity-check that the file's recorded memory_offset is + // larger than a single page (the host-function blob spilled + // beyond the fixed header). + { + use std::io::{Read, Seek, SeekFrom}; + let mut f = std::fs::File::open(&snap_path).unwrap(); + f.seek(SeekFrom::Start(v1_offset!(memory_offset) as u64)) + .unwrap(); + let mut buf = [0u8; 8]; + f.read_exact(&mut buf).unwrap(); + let memory_offset = u64::from_le_bytes(buf) as usize; + assert!( + memory_offset > PAGE_SIZE, + "expected memory_offset > PAGE_SIZE for large host_funcs (got {})", + memory_offset + ); + } + + let loaded = Snapshot::from_file(&snap_path).unwrap(); + let mut funcs = HostFunctions::default(); + for i in 0..N { + let name = format!("HostFunc_with_a_reasonably_long_name_{:04}", i); + funcs + .register_host_function(&name, |a: i32, b: i32| Ok(a + b)) + .unwrap(); + } + let mut sbox2 = MultiUseSandbox::from_snapshot(Arc::new(loaded), funcs, None).unwrap(); + let result: String = sbox2.call("Echo", "hello\n".to_string()).unwrap(); + assert_eq!(result, "hello\n"); +} + +/// A file with the wrong magic bytes should be rejected with a +/// descriptive error. +#[test] +fn bad_magic_rejected() { + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("bad_magic.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // Overwrite the 4-byte magic at offset 0. + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(0)).unwrap(); + file.write_all(b"XXXX").unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected magic mismatch"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("magic"), + "expected magic-related error, got: {}", + msg + ); +} + +/// A file truncated to less than the fixed header should be +/// rejected at header read time, not panic. +#[test] +fn truncated_file_rejected() { + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("truncated.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // Truncate to 100 bytes (well below the fixed header). + std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap() + .set_len(100) + .unwrap(); + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected truncation error"), + }; + let msg = format!("{}", err); + // Either "truncated" (read_bytes) or "snapshot read error" (read_u64) — + // both are acceptable; just assert no panic and an error came back. + assert!( + msg.contains("truncated") || msg.contains("read error"), + "expected truncation/read error, got: {}", + msg + ); +} + +/// A file whose `host_funcs_size` claims more bytes than the +/// host-funcs region actually contains should be rejected +/// without panic. +#[test] +fn corrupt_host_funcs_size_rejected() { + // Use a sandbox with at least one custom host function so the + // host-funcs region exists in the file. + let mut sbox = create_sandbox_with_custom_host_funcs(); + let snapshot = sbox.snapshot().unwrap(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("bad_hf_size.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // Overwrite host_funcs_size with a huge value that exceeds + // the file. + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(v1_offset!(host_funcs_size) as u64)) + .unwrap(); + file.write_all(&u64::MAX.to_le_bytes()).unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected host_funcs_size error"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("host_funcs_size"), + "expected host_funcs_size error, got: {}", + msg + ); +} + +/// A `host_funcs_size` that fits within the file but exceeds the +/// fixed cap must be rejected before the loader tries to allocate +/// a buffer of that size. +#[test] +fn oversized_host_funcs_size_rejected() { + let mut sbox = create_sandbox_with_custom_host_funcs(); + let snapshot = sbox.snapshot().unwrap(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("oversized_hf.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // Pad the file so a value that's well above the cap still + // fits within `file_len` (otherwise the existing + // "exceeds remaining file bytes" check would catch it first). + let bloated = 64 * 1024 * 1024_u64; + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + let cur_len = file.metadata().unwrap().len(); + file.seek(SeekFrom::Start(cur_len)).unwrap(); + file.write_all(&vec![0u8; bloated as usize]).unwrap(); + file.seek(SeekFrom::Start(v1_offset!(host_funcs_size) as u64)) + .unwrap(); + file.write_all(&bloated.to_le_bytes()).unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected oversized host_funcs_size error"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("exceeds maximum"), + "expected cap error, got: {}", + msg + ); +} + +/// `memory_offset` of 0 is structurally invalid because the memory +/// blob would overlap the fixed prefix. +#[test] +fn memory_offset_zero_rejected() { + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("memory_offset_zero.hls"); + snapshot.to_file(&snap_path).unwrap(); + + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(v1_offset!(memory_offset) as u64)) + .unwrap(); + file.write_all(&0u64.to_le_bytes()).unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected memory_offset=0 to be rejected"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("memory_offset"), + "expected memory_offset error, got: {}", + msg + ); +} + +/// `memory_offset` must be a multiple of `PAGE_SIZE` so the memory +/// blob can be mmapped directly. A non-aligned offset must be +/// rejected. +#[test] +fn memory_offset_unaligned_rejected() { + use hyperlight_common::vmem::PAGE_SIZE; + + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("memory_offset_unaligned.hls"); + snapshot.to_file(&snap_path).unwrap(); + + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(v1_offset!(memory_offset) as u64)) + .unwrap(); + let bad = (PAGE_SIZE as u64) + 1; + file.write_all(&bad.to_le_bytes()).unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected unaligned memory_offset to be rejected"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("memory_offset") && msg.contains("PAGE_SIZE"), + "expected page-alignment error, got: {}", + msg + ); +} + +/// `memory_size` that would push the memory blob past the end of +/// the file must be rejected. +#[test] +fn memory_blob_extends_past_eof_rejected() { + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("memory_size_overflow.hls"); + snapshot.to_file(&snap_path).unwrap(); + + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + let file_len = file.metadata().unwrap().len(); + file.seek(SeekFrom::Start(v1_offset!(memory_size) as u64)) + .unwrap(); + // A value that fits in u64 but is much larger than the + // file, so the blob bound check trips before any add + // overflows. + file.write_all(&(file_len * 2).to_le_bytes()).unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected oversized memory blob to be rejected"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("memory blob") && msg.contains("end of the file"), + "expected blob-end error, got: {}", + msg + ); +} + +/// `entrypoint_tag` is a u64 discriminant for `NextAction`. Only +/// values 0 (Initialise) and 1 (Call) are defined. Anything else +/// must be rejected when parsing the raw header. +#[test] +fn invalid_entrypoint_tag_rejected() { + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("bad_entrypoint_tag.hls"); + snapshot.to_file(&snap_path).unwrap(); + + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(v1_offset!(entrypoint_tag) as u64)) + .unwrap(); + file.write_all(&0xDEADu64.to_le_bytes()).unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected invalid entrypoint tag to be rejected"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("entrypoint tag"), + "expected entrypoint-tag error, got: {}", + msg + ); +} + +/// `init_data_permissions` is stored as `u64` on disk but the in +/// memory flag set is `u32`. Any value with bits beyond the u32 +/// range must be rejected before narrowing so that high bits do not +/// silently disappear. +#[test] +fn init_data_permissions_oversized_rejected() { + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("oversized_perms.hls"); + snapshot.to_file(&snap_path).unwrap(); + + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(v1_offset!(init_data_permissions) as u64)) + .unwrap(); + // High 32 bits set so `u32::try_from` fails. + file.write_all(&(1u64 << 33).to_le_bytes()).unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected oversized init_data_permissions to be rejected"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("init_data_permissions") && msg.contains("u32"), + "expected u32-range error, got: {}", + msg + ); +} + +/// `has_sregs` is serialized as `u64` for on-disk uniformity but is +/// semantically a boolean. Any value other than 0 or 1 must be +/// rejected at parse time. +#[test] +fn invalid_has_sregs_value_rejected() { + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("bad_has_sregs.hls"); + snapshot.to_file(&snap_path).unwrap(); + + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(v1_offset!(has_sregs) as u64)) + .unwrap(); + file.write_all(&2u64.to_le_bytes()).unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected has_sregs validation error"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("has_sregs"), + "expected has_sregs error, got: {}", + msg + ); +} + +/// A `Call` snapshot is mid-execution and must carry sregs. +/// Flipping `has_sregs` to 0 on such a snapshot must be rejected. +#[test] +fn call_snapshot_without_sregs_rejected() { + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("call_no_sregs.hls"); + snapshot.to_file(&snap_path).unwrap(); + + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(v1_offset!(has_sregs) as u64)) + .unwrap(); + file.write_all(&0u64.to_le_bytes()).unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected entrypoint/has_sregs mismatch"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("has_sregs"), + "expected has_sregs error, got: {}", + msg + ); +} + +/// An `Initialise` snapshot has not yet run on the vCPU and must +/// not carry sregs. Flipping `has_sregs` to 1 must be rejected. +#[test] +fn initialise_snapshot_with_sregs_rejected() { + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("init_with_sregs.hls"); + snapshot.to_file(&snap_path).unwrap(); + + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(v1_offset!(has_sregs) as u64)) + .unwrap(); + file.write_all(&1u64.to_le_bytes()).unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected entrypoint/has_sregs mismatch"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("has_sregs"), + "expected has_sregs error, got: {}", + msg + ); +} + +/// `header_hash` covers the preamble, header, sregs, and host_funcs +/// blob. Any mutation of those regions must trip verification, even +/// via `from_file_unchecked`. +#[test] +fn header_mutation_caught_by_hash() { + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("hdr_mut.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // Flip a byte in `stack_top_gva` to mutate the header in place. + { + use std::io::{Read, Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .read(true) + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(v1_offset!(stack_top_gva) as u64)) + .unwrap(); + let mut buf = [0u8; 8]; + file.read_exact(&mut buf).unwrap(); + buf[0] ^= 0xFF; + file.seek(SeekFrom::Start(v1_offset!(stack_top_gva) as u64)) + .unwrap(); + file.write_all(&buf).unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("header mutation must be detected"), + }; + assert!( + format!("{}", err).contains("header_hash"), + "expected header_hash error, got: {}", + err + ); + + // `from_file_unchecked` skips the blob hash but still verifies + // the header hash, so it must also reject this. + let err = match Snapshot::from_file_unchecked(&snap_path) { + Err(e) => e, + Ok(_) => panic!("header mutation must be detected even by from_file_unchecked"), + }; + assert!( + format!("{}", err).contains("header_hash"), + "expected header_hash error, got: {}", + err + ); +} + +/// Sregs sit between the header and the host_funcs blob. Mutating +/// any sregs byte must trip `header_hash` verification. +#[test] +fn sregs_mutation_caught_by_hash() { + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("sregs_mut.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // Flip the first byte of the sregs region (just after the + // RawHeaderV1 ends). + let sregs_offset = std::mem::size_of::() + std::mem::size_of::(); + { + use std::io::{Read, Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .read(true) + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(sregs_offset as u64)).unwrap(); + let mut byte = [0u8; 1]; + file.read_exact(&mut byte).unwrap(); + byte[0] ^= 0xFF; + file.seek(SeekFrom::Start(sregs_offset as u64)).unwrap(); + file.write_all(&byte).unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("sregs mutation must be detected"), + }; + assert!( + format!("{}", err).contains("header_hash"), + "expected header_hash error, got: {}", + err + ); +} + +/// The host-functions flatbuffer blob is part of `header_hash`. +/// Mutating its bytes must trip verification. +#[test] +fn host_funcs_mutation_caught_by_hash() { + let mut sbox = create_sandbox_with_custom_host_funcs(); + let snapshot = sbox.snapshot().unwrap(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("hf_mut.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let hf_offset = FIXED_PREFIX_SIZE; + { + use std::io::{Read, Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .read(true) + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(hf_offset as u64)).unwrap(); + let mut byte = [0u8; 1]; + file.read_exact(&mut byte).unwrap(); + byte[0] ^= 0xFF; + file.seek(SeekFrom::Start(hf_offset as u64)).unwrap(); + file.write_all(&byte).unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("host_funcs mutation must be detected"), + }; + assert!( + format!("{}", err).contains("header_hash"), + "expected header_hash error, got: {}", + err + ); +} + +/// `blob_hash` itself is part of `header_hash`. Flipping a bit +/// inside the on-disk `blob_hash` field must be detected by the +/// always-checked header hash, in both `from_file` and +/// `from_file_unchecked`. Without this property an attacker who +/// rewrites a tampered blob could also rewrite `blob_hash` to +/// match and slip past `from_file_unchecked`. +#[test] +fn blob_hash_field_mutation_caught_by_header_hash() { + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("blob_hash_mut.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // `RawHashes` sits between sregs and the host_funcs blob, so + // its end is at `FIXED_PREFIX_SIZE`. Compute the field offset + // from the struct itself so this stays correct if the layout + // ever changes. + let blob_hash_offset = FIXED_PREFIX_SIZE - std::mem::size_of::() + + std::mem::offset_of!(RawHashes, blob_hash); + { + use std::io::{Read, Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .read(true) + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(blob_hash_offset as u64)).unwrap(); + let mut byte = [0u8; 1]; + file.read_exact(&mut byte).unwrap(); + byte[0] ^= 0xFF; + file.seek(SeekFrom::Start(blob_hash_offset as u64)).unwrap(); + file.write_all(&byte).unwrap(); + } + + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("blob_hash mutation must be detected"), + }; + assert!( + format!("{}", err).contains("header_hash"), + "expected header_hash error, got: {}", + err + ); + + // The unchecked loader skips the blob hash itself, but + // `blob_hash` is folded into `header_hash`, so the unchecked + // loader must still reject this. + let err = match Snapshot::from_file_unchecked(&snap_path) { + Err(e) => e, + Ok(_) => panic!("blob_hash mutation must be detected even by from_file_unchecked"), + }; + assert!( + format!("{}", err).contains("header_hash"), + "expected header_hash error, got: {}", + err + ); +} + +/// Security regression: an attacker who rewrites the memory blob +/// AND updates `RawHashes.blob_hash` to match the new blob must +/// still be rejected, because `header_hash` covers `blob_hash`. +/// Without this property `from_file_unchecked` would silently +/// accept attacker-controlled guest memory. +#[test] +fn blob_and_blob_hash_mutation_caught_by_header_hash() { + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("blob_and_hash_mut.hls"); + snapshot.to_file(&snap_path).unwrap(); + + use std::io::{Read, Seek, SeekFrom, Write}; + + // Read `memory_offset` and `memory_size` out of the header. + let (memory_offset, memory_size) = { + let mut file = std::fs::OpenOptions::new() + .read(true) + .open(&snap_path) + .unwrap(); + let mut buf8 = [0u8; 8]; + + file.seek(SeekFrom::Start(v1_offset!(memory_offset) as u64)) + .unwrap(); + file.read_exact(&mut buf8).unwrap(); + let mo = u64::from_le_bytes(buf8) as usize; + + file.seek(SeekFrom::Start(v1_offset!(memory_size) as u64)) + .unwrap(); + file.read_exact(&mut buf8).unwrap(); + let ms = u64::from_le_bytes(buf8) as usize; + + (mo, ms) + }; + + // Mutate one byte in the memory blob. + { + let mut file = std::fs::OpenOptions::new() + .read(true) + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start((memory_offset + 100) as u64)) + .unwrap(); + let mut byte = [0u8; 1]; + file.read_exact(&mut byte).unwrap(); + byte[0] ^= 0xFF; + file.seek(SeekFrom::Start((memory_offset + 100) as u64)) + .unwrap(); + file.write_all(&byte).unwrap(); + } + + // Recompute `blob_hash` over the modified blob and write it + // back into the `RawHashes.blob_hash` field. This is exactly + // the attacker model: edit the blob, recompute the cheap hash, + // hope the loader trusts it. + { + let mut file = std::fs::OpenOptions::new() + .read(true) + .write(true) + .open(&snap_path) + .unwrap(); + let mut blob = vec![0u8; memory_size]; + file.seek(SeekFrom::Start(memory_offset as u64)).unwrap(); + file.read_exact(&mut blob).unwrap(); + let new_blob_hash: [u8; 32] = blake3::hash(&blob).into(); + + let blob_hash_offset = FIXED_PREFIX_SIZE - std::mem::size_of::() + + std::mem::offset_of!(RawHashes, blob_hash); + file.seek(SeekFrom::Start(blob_hash_offset as u64)).unwrap(); + file.write_all(&new_blob_hash).unwrap(); + } + + // `from_file` rejects: the blob hash now matches the modified + // blob, but `header_hash` still covers the original `blob_hash`. + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("tampered blob with matching blob_hash must be detected"), + }; + assert!( + format!("{}", err).contains("header_hash"), + "expected header_hash error, got: {}", + err + ); + + // `from_file_unchecked` must also reject. This is the load-bearing + // case: it skips the blob hash check itself, so the only thing + // protecting it from a tampered blob is `header_hash` covering + // `blob_hash`. + let err = match Snapshot::from_file_unchecked(&snap_path) { + Err(e) => e, + Ok(_) => { + panic!("tampered blob with matching blob_hash must be detected by from_file_unchecked") + } + }; + assert!( + format!("{}", err).contains("header_hash"), + "expected header_hash error, got: {}", + err + ); +} + +/// `MAP_PRIVATE` / `FILE_MAP_COPY` invariant: guest writes +/// through a file-backed snapshot must NOT modify the on-disk +/// file. Verifies this by hashing the raw bytes before and after +/// running guest functions that mutate state. +#[test] +fn cow_does_not_mutate_backing_file() { + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("cow.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let hash_before: [u8; 32] = blake3::hash(&std::fs::read(&snap_path).unwrap()).into(); + + // Load the snapshot and have the guest write into mapped memory. + let loaded = Snapshot::from_file(&snap_path).unwrap(); + let mut sbox = + MultiUseSandbox::from_snapshot(Arc::new(loaded), HostFunctions::default(), None).unwrap(); + sbox.call::("AddToStatic", 999i32).unwrap(); + + // Drop the sandbox to ensure mappings are released before re-reading. + drop(sbox); + + let hash_after: [u8; 32] = blake3::hash(&std::fs::read(&snap_path).unwrap()).into(); + assert_eq!( + hash_before, hash_after, + "guest writes must not propagate to the backing snapshot file" + ); +} + +/// Pre-init snapshot (`from_env`) round-tripped through a file +/// must still complete guest initialisation on load. +#[test] +fn pre_init_snapshot_save_load() { + use super::NextAction; + + let snapshot = create_snapshot_from_binary(); + // Guard: this constructor produces a `NextAction::Initialise` + // snapshot. If that ever changes, this test loses its purpose. + assert!( + matches!(snapshot.entrypoint(), NextAction::Initialise(_)), + "expected pre-init snapshot from from_env" + ); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("preinit.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded = Snapshot::from_file(&snap_path).unwrap(); + assert!( + matches!(loaded.entrypoint(), NextAction::Initialise(_)), + "pre-init entrypoint should round-trip" + ); + + let mut sbox = + MultiUseSandbox::from_snapshot(Arc::new(loaded), HostFunctions::default(), None).unwrap(); + // Guest init must run via vm.initialise() before the call works. + let result: i32 = sbox.call("GetStatic", ()).unwrap(); + assert_eq!(result, 0); +} + +/// `from_file_unchecked` skips the blake3 hash check but must +/// still validate the rest of the header (magic, format version, +/// architecture, ABI version, hypervisor tag). +#[test] +fn from_file_unchecked_still_validates_header() { + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("unchecked_bad_arch.hls"); + snapshot.to_file(&snap_path).unwrap(); + + // Corrupt the architecture tag to a bogus value. + { + use std::io::{Seek, SeekFrom, Write}; + let mut file = std::fs::OpenOptions::new() + .write(true) + .open(&snap_path) + .unwrap(); + file.seek(SeekFrom::Start(v1_offset!(arch) as u64)).unwrap(); + file.write_all(&99u32.to_le_bytes()).unwrap(); + } + + let err = match Snapshot::from_file_unchecked(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected arch validation to fail even without hash check"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("architecture"), + "expected arch error from from_file_unchecked, got: {}", + msg + ); +} + +// Tests for `MultiUseSandbox::from_snapshot` `SandboxConfiguration` +// plumbing. Layout fields must be silently overridden by the snapshot. +// Runtime fields (interrupt knobs, gdb, crashdump) must take effect. +// `interrupt_*` are covered by `interrupt_custom_signal_no_and_retry_delay` +// in `tests/integration_test.rs`. `guest_debug_info` (gdb) needs an +// in-test gdb stub and is not exercised here. + +/// Layout fields supplied via `SandboxConfiguration` must be silently +/// overridden. The snapshot's own layout is authoritative because the +/// on-disk memory blob already encodes those sizes. +#[test] +fn from_snapshot_silently_ignores_layout_overrides() { + use crate::sandbox::SandboxConfiguration; + + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + let original_input = snapshot.layout().input_data_size; + let original_output = snapshot.layout().output_data_size; + let original_heap = snapshot.layout().heap_size; + let original_scratch = snapshot.layout().scratch_size; + + // Build a config whose every layout field is different from the + // snapshot's layout. `from_snapshot` must ignore all of them. + let mut config = SandboxConfiguration::default(); + config.set_input_data_size(original_input * 2); + config.set_output_data_size(original_output * 2); + config.set_heap_size((original_heap as u64) * 2); + config.set_scratch_size(original_scratch * 2); + + let mut sbox2 = + MultiUseSandbox::from_snapshot(snapshot.clone(), HostFunctions::default(), Some(config)) + .unwrap(); + + // The new sandbox must be fully usable. + sbox2.call::("GetStatic", ()).unwrap(); + + // The new sandbox's layout must match the snapshot's, not the + // override config. + let new_snap = sbox2.snapshot().unwrap(); + assert_eq!(new_snap.layout().input_data_size, original_input); + assert_eq!(new_snap.layout().output_data_size, original_output); + assert_eq!(new_snap.layout().heap_size, original_heap); + assert_eq!(new_snap.layout().scratch_size, original_scratch); +} + +/// `from_snapshot` must honor `guest_core_dump=true` from the supplied +/// config so that `generate_crashdump_to_dir` actually writes a file. +#[test] +#[cfg(crashdump)] +fn from_snapshot_honors_guest_core_dump_enabled() { + use crate::sandbox::SandboxConfiguration; + + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + + let mut config = SandboxConfiguration::default(); + config.set_guest_core_dump(true); + + let mut sbox2 = + MultiUseSandbox::from_snapshot(snapshot, HostFunctions::default(), Some(config)).unwrap(); + + let dir = tempfile::tempdir().unwrap(); + sbox2 + .generate_crashdump_to_dir(dir.path().to_str().unwrap()) + .unwrap(); + + let entries: Vec<_> = std::fs::read_dir(dir.path()) + .unwrap() + .filter_map(Result::ok) + .collect(); + assert!( + !entries.is_empty(), + "expected core dump file to be created when guest_core_dump=true" + ); +} + +/// `from_snapshot` must honor `guest_core_dump=false` from the supplied +/// config so that `generate_crashdump_to_dir` produces no file. +#[test] +#[cfg(crashdump)] +fn from_snapshot_honors_guest_core_dump_disabled() { + use crate::sandbox::SandboxConfiguration; + + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + + let mut config = SandboxConfiguration::default(); + config.set_guest_core_dump(false); + + let mut sbox2 = + MultiUseSandbox::from_snapshot(snapshot, HostFunctions::default(), Some(config)).unwrap(); + + let dir = tempfile::tempdir().unwrap(); + sbox2 + .generate_crashdump_to_dir(dir.path().to_str().unwrap()) + .unwrap(); + + let entries: Vec<_> = std::fs::read_dir(dir.path()) + .unwrap() + .filter_map(Result::ok) + .collect(); + assert!( + entries.is_empty(), + "expected no core dump file when guest_core_dump=false, found {:?}", + entries.iter().map(|e| e.path()).collect::>() + ); +} + +/// `from_file` on a non-existent path must return an error rather +/// than panicking. +#[test] +fn from_file_nonexistent_path_returns_error() { + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("does_not_exist.hls"); + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected I/O error for missing file"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("failed to open snapshot file"), + "expected open-failure message, got: {}", + msg + ); +} + +/// `to_file` must succeed when overwriting an existing file, and +/// the resulting file must be loadable. +#[test] +fn to_file_overwrites_existing() { + let mut sbox = create_test_sandbox(); + let snap1 = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("overwrite.hls"); + + snap1.to_file(&snap_path).unwrap(); + let first_size = std::fs::metadata(&snap_path).unwrap().len(); + assert!(first_size > 0); + + // Mutate sandbox state and snapshot again, overwriting the same file. + sbox.call::("AddToStatic", 314i32).unwrap(); + let snap2 = sbox.snapshot().unwrap(); + snap2.to_file(&snap_path).unwrap(); + + // Load the overwritten file and verify it observes the second + // snapshot's state. + let loaded = Snapshot::from_file(&snap_path).unwrap(); + let mut sbox2 = + MultiUseSandbox::from_snapshot(Arc::new(loaded), HostFunctions::default(), None).unwrap(); + assert_eq!(sbox2.call::("GetStatic", ()).unwrap(), 314); +} + +/// `from_snapshot`-built sandbox must support `map_file_cow` of a +/// host file and the guest must read back the file contents. +#[test] +fn map_file_cow_after_from_snapshot() { + use std::io::Write; + + // Build a snapshot from disk. + let mut producer = create_test_sandbox(); + let snap = producer.snapshot().unwrap(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("for_map.hls"); + snap.to_file(&snap_path).unwrap(); + + // Build a host file with known contents to map into the sandbox. + let page_size = page_size::get(); + let payload = b"hello from map_file_cow after from_snapshot"; + let mut padded = vec![0u8; page_size]; + padded[..payload.len()].copy_from_slice(payload); + let file_path = dir.path().join("mapped_payload.bin"); + std::fs::File::create(&file_path) + .unwrap() + .write_all(&padded) + .unwrap(); + + // Construct a sandbox from the on-disk snapshot and map the file. + let loaded = Snapshot::from_file(&snap_path).unwrap(); + let mut sbox = + MultiUseSandbox::from_snapshot(Arc::new(loaded), HostFunctions::default(), None).unwrap(); + + let guest_base: u64 = 0x1_0000_0000; + let mapped_size = sbox.map_file_cow(&file_path, guest_base, None).unwrap(); + assert!(mapped_size as usize >= payload.len()); + + // Read back from the guest and verify byte-for-byte equality. + let actual: Vec = sbox + .call("ReadMappedBuffer", (guest_base, payload.len() as u64, true)) + .unwrap(); + assert_eq!(actual, payload); +} + +/// A sandbox restored from a file-loaded snapshot must still be +/// snapshottable, and the new snapshot must save and reload +/// correctly. +#[test] +fn snapshot_after_restore_to_file_loaded_baseline() { + let mut producer = create_test_sandbox(); + let baseline = producer.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let baseline_path = dir.path().join("baseline.hls"); + baseline.to_file(&baseline_path).unwrap(); + + let loaded = Arc::new(Snapshot::from_file(&baseline_path).unwrap()); + let mut sbox = + MultiUseSandbox::from_snapshot(loaded.clone(), HostFunctions::default(), None).unwrap(); + + // Mutate, restore to the file baseline, mutate to a new value, + // then snapshot the post-restore sandbox. + sbox.call::("AddToStatic", 7i32).unwrap(); + sbox.restore(loaded).unwrap(); + assert_eq!(sbox.call::("GetStatic", ()).unwrap(), 0); + sbox.call::("AddToStatic", 99i32).unwrap(); + + let new_snap = sbox.snapshot().unwrap(); + let new_path = dir.path().join("after_restore.hls"); + new_snap.to_file(&new_path).unwrap(); + + // Load the new snapshot in a fresh sandbox and verify state. + let reloaded = Snapshot::from_file(&new_path).unwrap(); + let mut sbox2 = + MultiUseSandbox::from_snapshot(Arc::new(reloaded), HostFunctions::default(), None).unwrap(); + assert_eq!(sbox2.call::("GetStatic", ()).unwrap(), 99); +} + +/// `from_file` on an empty file must return an error rather than +/// panicking. +#[test] +fn from_file_empty_file_returns_error() { + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("empty.hls"); + std::fs::File::create(&snap_path).unwrap(); + let err = match Snapshot::from_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected error from zero-byte file"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("snapshot read error") || msg.contains("truncated"), + "expected truncation/read error, got: {}", + msg + ); +} + +/// `to_file` to a path inside a non-existent directory must return +/// an I/O error rather than panicking. +#[test] +fn to_file_nonexistent_directory_returns_error() { + let snapshot = create_snapshot_from_binary(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("does_not_exist").join("snap.hls"); + let err = match snapshot.to_file(&snap_path) { + Err(e) => e, + Ok(_) => panic!("expected error writing to nonexistent directory"), + }; + let msg = format!("{}", err); + assert!( + msg.contains("failed to create snapshot file"), + "expected create-failure message, got: {}", + msg + ); +} + +/// Restore is currently rejected when the target snapshot was +/// loaded from a different file than the sandbox was built from. +/// `Snapshot::sandbox_id` is a process-local atomic counter assigned +/// fresh on every `from_file`, so the ids never match. Documented as +/// a known limitation in `MultiUseSandbox::from_snapshot` and tracked +/// by the `TODO` to replace ids with a `SandboxMemoryLayout`-equality +/// check. +#[test] +fn restore_to_different_file_loaded_snapshot_rejected() { + let mut producer = create_test_sandbox(); + + let dir = tempfile::tempdir().unwrap(); + + // Snapshot A: zero state. + let snap_a_path = dir.path().join("a.hls"); + producer.snapshot().unwrap().to_file(&snap_a_path).unwrap(); + + // Snapshot B: state with AddToStatic(50). + producer.call::("AddToStatic", 50i32).unwrap(); + let snap_b_path = dir.path().join("b.hls"); + producer.snapshot().unwrap().to_file(&snap_b_path).unwrap(); + + let loaded_a = Arc::new(Snapshot::from_file(&snap_a_path).unwrap()); + let mut sbox = + MultiUseSandbox::from_snapshot(loaded_a, HostFunctions::default(), None).unwrap(); + + let loaded_b = Arc::new(Snapshot::from_file(&snap_b_path).unwrap()); + let err = match sbox.restore(loaded_b) { + Err(e) => e, + Ok(_) => panic!("expected SnapshotSandboxMismatch from cross-file restore"), + }; + let msg = format!("{:?}", err); + assert!( + msg.contains("SnapshotSandboxMismatch"), + "expected SnapshotSandboxMismatch, got: {}", + msg + ); +} + +/// Two independent `Snapshot::from_file` calls of the same path +/// must each yield a usable snapshot. Sandboxes built from each +/// must work independently and produce isolated CoW state. +#[test] +fn multiple_from_file_calls_of_same_path() { + let mut sbox = create_test_sandbox(); + let snapshot = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("multi_load.hls"); + snapshot.to_file(&snap_path).unwrap(); + + let loaded_a = Arc::new(Snapshot::from_file(&snap_path).unwrap()); + let loaded_b = Arc::new(Snapshot::from_file(&snap_path).unwrap()); + + let mut sbox_a = + MultiUseSandbox::from_snapshot(loaded_a, HostFunctions::default(), None).unwrap(); + let mut sbox_b = + MultiUseSandbox::from_snapshot(loaded_b, HostFunctions::default(), None).unwrap(); + + sbox_a.call::("AddToStatic", 11i32).unwrap(); + sbox_b.call::("AddToStatic", 22i32).unwrap(); + + assert_eq!(sbox_a.call::("GetStatic", ()).unwrap(), 11); + assert_eq!(sbox_b.call::("GetStatic", ()).unwrap(), 22); +} + +/// Loading a file via `Snapshot::from_file` after the file has been +/// rewritten with a different snapshot must observe the new contents. +/// Documents the load-once / no-cache semantic. +#[test] +fn from_file_after_overwrite_observes_new_contents() { + let mut sbox = create_test_sandbox(); + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join("evolving.hls"); + + // Write a snapshot at state X. + sbox.snapshot().unwrap().to_file(&snap_path).unwrap(); + // Load and immediately drop. On Windows, an overwriting `to_file` + // call on a path with an active mapped view fails with + // `ERROR_USER_MAPPED_FILE` (1224), so the loaded snapshot must be + // released before re-writing the same path. + { + let _loaded_x = Snapshot::from_file(&snap_path).unwrap(); + } + + // Mutate and overwrite with a snapshot at state Y. + sbox.call::("AddToStatic", 55i32).unwrap(); + sbox.snapshot().unwrap().to_file(&snap_path).unwrap(); + + // A subsequent `from_file` of the same path must reflect Y. + let loaded_y = Snapshot::from_file(&snap_path).unwrap(); + let mut sbox_y = + MultiUseSandbox::from_snapshot(Arc::new(loaded_y), HostFunctions::default(), None).unwrap(); + assert_eq!(sbox_y.call::("GetStatic", ()).unwrap(), 55); +} From 7fd38b13c2db52d80f198b27fbcb7cc5a42078f8 Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Thu, 30 Apr 2026 18:54:14 -0700 Subject: [PATCH 13/15] Add snapshot file benchmarks Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- src/hyperlight_host/benches/benchmarks.rs | 100 +++++++++++++++++++++- 1 file changed, 99 insertions(+), 1 deletion(-) diff --git a/src/hyperlight_host/benches/benchmarks.rs b/src/hyperlight_host/benches/benchmarks.rs index 462e8908d..e35d2c175 100644 --- a/src/hyperlight_host/benches/benchmarks.rs +++ b/src/hyperlight_host/benches/benchmarks.rs @@ -551,6 +551,103 @@ fn shared_memory_benchmark(c: &mut Criterion) { group.finish(); } +// ============================================================================ +// Benchmark Category: Snapshot Files +// ============================================================================ + +fn snapshot_file_benchmark(c: &mut Criterion) { + use hyperlight_host::HostFunctions; + use hyperlight_host::sandbox::snapshot::Snapshot; + + let mut group = c.benchmark_group("snapshot_files"); + + // Pre-create snapshot files for all sizes + let dirs: Vec<_> = SandboxSize::all() + .iter() + .map(|size| { + let dir = tempfile::tempdir().unwrap(); + let snap_path = dir.path().join(format!("{}.hls", size.name())); + let snapshot = { + let mut sbox = create_multiuse_sandbox_with_size(*size); + sbox.snapshot().unwrap() + }; + snapshot.to_file(&snap_path).unwrap(); + (dir, snapshot) + }) + .collect(); + + // Benchmark: save_snapshot + for (i, size) in SandboxSize::all().iter().enumerate() { + let snap_dir = tempfile::tempdir().unwrap(); + let path = snap_dir.path().join("bench.hls"); + let snapshot = &dirs[i].1; + group.bench_function(format!("save_snapshot/{}", size.name()), |b| { + b.iter(|| { + snapshot.to_file(&path).unwrap(); + }); + }); + } + + // Benchmark: load_snapshot (mmap + header parse + hash verify) + for (i, size) in SandboxSize::all().iter().enumerate() { + let snap_path = dirs[i].0.path().join(format!("{}.hls", size.name())); + group.bench_function(format!("load_snapshot/{}", size.name()), |b| { + b.iter(|| { + let _ = Snapshot::from_file(&snap_path).unwrap(); + }); + }); + } + + // Benchmark: cold_start_via_evolve (new + evolve + call) + for size in SandboxSize::all() { + group.bench_function(format!("cold_start_via_evolve/{}", size.name()), |b| { + b.iter(|| { + let mut sbox = create_multiuse_sandbox_with_size(size); + sbox.call::("Echo", "hello\n".to_string()).unwrap(); + }); + }); + } + + // Benchmark: cold_start_via_snapshot (load + from_snapshot + call) + for (i, size) in SandboxSize::all().iter().enumerate() { + let snap_path = dirs[i].0.path().join(format!("{}.hls", size.name())); + group.bench_function(format!("cold_start_via_snapshot/{}", size.name()), |b| { + b.iter(|| { + let loaded = Snapshot::from_file(&snap_path).unwrap(); + let mut sbox = MultiUseSandbox::from_snapshot( + std::sync::Arc::new(loaded), + HostFunctions::default(), + None, + ) + .unwrap(); + sbox.call::("Echo", "hello\n".to_string()).unwrap(); + }); + }); + } + + // Benchmark: cold_start_via_snapshot_unchecked (no hash verify) + for (i, size) in SandboxSize::all().iter().enumerate() { + let snap_path = dirs[i].0.path().join(format!("{}.hls", size.name())); + group.bench_function( + format!("cold_start_via_snapshot_unchecked/{}", size.name()), + |b| { + b.iter(|| { + let loaded = Snapshot::from_file_unchecked(&snap_path).unwrap(); + let mut sbox = MultiUseSandbox::from_snapshot( + std::sync::Arc::new(loaded), + HostFunctions::default(), + None, + ) + .unwrap(); + sbox.call::("Echo", "hello\n".to_string()).unwrap(); + }); + }, + ); + } + + group.finish(); +} + criterion_group! { name = benches; config = Criterion::default(); @@ -561,6 +658,7 @@ criterion_group! { guest_call_benchmark_large_param, function_call_serialization_benchmark, sample_workloads_benchmark, - shared_memory_benchmark + shared_memory_benchmark, + snapshot_file_benchmark } criterion_main!(benches); From 621cc03beadae3d9158e72d07d3d156abf2b21fd Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Fri, 1 May 2026 13:26:42 -0700 Subject: [PATCH 14/15] Add gdb test for MultiUseSandbox from_snapshot Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- .../examples/guest-debugging/main.rs | 201 ++++++++++++++---- 1 file changed, 157 insertions(+), 44 deletions(-) diff --git a/src/hyperlight_host/examples/guest-debugging/main.rs b/src/hyperlight_host/examples/guest-debugging/main.rs index dc42b0aea..af1ec0548 100644 --- a/src/hyperlight_host/examples/guest-debugging/main.rs +++ b/src/hyperlight_host/examples/guest-debugging/main.rs @@ -115,6 +115,76 @@ mod tests { #[cfg(windows)] const GDB_COMMAND: &str = "gdb"; + /// Construct the (out_file_path, cmd_file_path, manifest_dir) + /// triple every gdb test needs. + fn gdb_test_paths(name: &str) -> (String, String, String) { + let out_dir = std::env::var("OUT_DIR").expect("Failed to get out dir"); + let manifest_dir = std::env::var("CARGO_MANIFEST_DIR") + .expect("Failed to get manifest dir") + .replace('\\', "/"); + let out_file_path = format!("{out_dir}/{name}.output"); + let cmd_file_path = format!("{out_dir}/{name}-commands.txt"); + (out_file_path, cmd_file_path, manifest_dir) + } + + /// Build a gdb script that connects to `port`, sets a single + /// breakpoint at `breakpoint`, prints `echo_msg` when hit, and + /// detaches before quitting. + /// + /// The breakpoint commands end with `detach` + `quit` instead of + /// `continue`. The previous "inner continue, outer continue, quit" + /// shape races with the inferior exit. After the breakpoint hits + /// and the inner `continue` resumes the guest, the guest may run + /// to completion and the gdb stub may close the remote before gdb + /// has dispatched the outer `continue`, producing a non-zero exit + /// with `Remote connection closed`. Detaching from the breakpoint + /// commands removes that window. The host process keeps running + /// the guest call to completion on its own after detach. + fn single_breakpoint_script( + manifest_dir: &str, + port: u16, + out_file_path: &str, + breakpoint: &str, + echo_msg: &str, + ) -> String { + let cmd = format!( + "file {manifest_dir}/../tests/rust_guests/bin/debug/simpleguest + target remote :{port} + + set pagination off + set logging file {out_file_path} + set logging enabled on + + break {breakpoint} + commands + echo \"{echo_msg}\\n\" + backtrace + + set logging enabled off + detach + quit + end + + continue + " + ); + #[cfg(windows)] + let cmd = format!("set osabi none\n{cmd}"); + cmd + } + + /// Spawn the gdb client to execute the script in `cmd_file_path`. + fn spawn_gdb_client(cmd_file_path: &str) -> std::process::Child { + Command::new(GDB_COMMAND) + .arg("-nx") + .arg("--nw") + .arg("--batch") + .arg("-x") + .arg(cmd_file_path) + .spawn() + .expect("Failed to start gdb") + } + fn write_cmds_file(cmd_file_path: &str, cmd: &str) -> io::Result<()> { let file = File::create(cmd_file_path)?; let mut writer = BufWriter::new(file); @@ -163,14 +233,7 @@ mod tests { // wait 3 seconds for the gdb to connect thread::sleep(Duration::from_secs(3)); - let mut gdb = Command::new(GDB_COMMAND) - .arg("-nx") // Don't load any .gdbinit files - .arg("--nw") - .arg("--batch") - .arg("-x") - .arg(cmd_file_path) - .spawn() - .map_err(|e| new_error!("Failed to start gdb process: {}", e))?; + let mut gdb = spawn_gdb_client(cmd_file_path); // wait 3 seconds for the gdb to connect thread::sleep(Duration::from_secs(10)); @@ -245,38 +308,16 @@ mod tests { #[test] #[serial] fn test_gdb_end_to_end() { - let out_dir = std::env::var("OUT_DIR").expect("Failed to get out dir"); - let manifest_dir = std::env::var("CARGO_MANIFEST_DIR") - .expect("Failed to get manifest dir") - .replace('\\', "/"); - let out_file_path = format!("{out_dir}/gdb.output"); - let cmd_file_path = format!("{out_dir}/gdb-commands.txt"); - - let cmd = format!( - "file {manifest_dir}/../tests/rust_guests/bin/debug/simpleguest - target remote :8080 - - set pagination off - set logging file {out_file_path} - set logging enabled on - - break hyperlight_main - commands - echo \"Stopped at hyperlight_main breakpoint\\n\" - backtrace - - set logging enabled off - detach - quit - end - - continue - " + let (out_file_path, cmd_file_path, manifest_dir) = gdb_test_paths("gdb"); + + let cmd = single_breakpoint_script( + &manifest_dir, + 8080, + &out_file_path, + "hyperlight_main", + "Stopped at hyperlight_main breakpoint", ); - #[cfg(windows)] - let cmd = format!("set osabi none\n{}", cmd); - let checker = |contents: String| contents.contains("Stopped at hyperlight_main breakpoint"); let result = run_guest_and_gdb(&cmd_file_path, &out_file_path, &cmd, checker); @@ -288,13 +329,8 @@ mod tests { #[test] #[serial] fn test_gdb_sse_check() { - let out_dir = std::env::var("OUT_DIR").expect("Failed to get out dir"); - let manifest_dir = std::env::var("CARGO_MANIFEST_DIR") - .expect("Failed to get manifest dir") - .replace('\\', "/"); + let (out_file_path, cmd_file_path, manifest_dir) = gdb_test_paths("gdb-sse"); println!("manifest dir {manifest_dir}"); - let out_file_path = format!("{out_dir}/gdb-sse.output"); - let cmd_file_path = format!("{out_dir}/gdb-sse--commands.txt"); let cmd = format!( "file {manifest_dir}/../tests/rust_guests/bin/debug/simpleguest @@ -330,4 +366,81 @@ mod tests { cleanup(&out_file_path, &cmd_file_path); assert!(result.is_ok(), "{}", result.unwrap_err()); } + + #[test] + #[serial] + fn test_gdb_from_snapshot() { + use std::sync::Arc; + + use hyperlight_host::HostFunctions; + use hyperlight_host::sandbox::snapshot::Snapshot; + + const PORT: u16 = 8081; + + let (out_file_path, cmd_file_path, manifest_dir) = gdb_test_paths("gdb-from-snapshot"); + let out_dir = std::env::var("OUT_DIR").unwrap(); + let snap_path = format!("{out_dir}/from-snapshot-debug.hls"); + + // Build a sandbox the normal way and persist its snapshot. + let mut producer: MultiUseSandbox = UninitializedSandbox::new( + hyperlight_host::GuestBinary::FilePath( + hyperlight_testing::simple_guest_as_string().unwrap(), + ), + None, + ) + .unwrap() + .evolve() + .unwrap(); + producer.snapshot().unwrap().to_file(&snap_path).unwrap(); + + // Order matters. The gdb stub event loop must enter (i.e. + // `VcpuStopped` must be sent on the channel) before the gdb + // client connects, otherwise the wire protocol desyncs. The + // evolve case gets this for free because `evolve()` runs + // `vm.initialise()` which trips the entry breakpoint + // immediately. For a `Call` snapshot `vm.initialise` is a + // no-op, so we trigger the breakpoint by running `sbox.call` + // here before the client is launched below. + let snap_path_thread = snap_path.clone(); + let sandbox_thread = thread::spawn(move || -> Result<()> { + let mut cfg = SandboxConfiguration::default(); + cfg.set_guest_debug_info(DebugInfo { port: PORT }); + + let loaded = Arc::new(Snapshot::from_file(&snap_path_thread)?); + let mut sbox = + MultiUseSandbox::from_snapshot(loaded, HostFunctions::default(), Some(cfg))?; + sbox.call::( + "PrintOutput", + "Hello from a from_snapshot sandbox\n".to_string(), + )?; + Ok(()) + }); + + // Wait for the sandbox thread to bind the listener, install + // the one-shot breakpoint, and trip it. + thread::sleep(Duration::from_secs(3)); + + let cmd = single_breakpoint_script( + &manifest_dir, + PORT, + &out_file_path, + "main.rs:simpleguest::print_output", + "Stopped at print_output breakpoint", + ); + write_cmds_file(&cmd_file_path, &cmd).expect("Failed to write gdb commands"); + + let mut gdb = spawn_gdb_client(&cmd_file_path); + let _ = gdb.wait(); + let sandbox_result = sandbox_thread + .join() + .expect("from_snapshot sandbox thread panicked"); + let _ = std::fs::remove_file(&snap_path); + + let checker = |contents: String| contents.contains("Stopped at print_output breakpoint"); + let result = check_output(&out_file_path, checker); + + cleanup(&out_file_path, &cmd_file_path); + sandbox_result.expect("from_snapshot sandbox returned error"); + result.expect("gdb output missing expected breakpoint hit"); + } } From 033c551a50f31dd6a8a89b9b0cb85509223e3d6c Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> Date: Fri, 8 May 2026 16:08:01 -0700 Subject: [PATCH 15/15] WIP: snapshot ABI tripwires + golden tests Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com> --- .github/workflows/RegenSnapshotGoldens.yml | 92 +++ docs/snapshot-golden-tests-plan.md | 460 ++++++++++++++ .../src/sandbox/snapshot/abi_tripwires.rs | 213 +++++++ .../src/sandbox/snapshot/file.rs | 80 +-- .../src/sandbox/snapshot/golden_tests.rs | 573 ++++++++++++++++++ .../src/sandbox/snapshot/mod.rs | 2 + src/hyperlight_host/tests/integration_test.rs | 4 +- .../tests/snapshot_goldens/fixtures/README.md | 81 +++ .../snapshot_goldens/fixtures/call_kvm.hls | Bin 0 -> 5349376 bytes .../snapshot_goldens/fixtures/init_kvm.hls | Bin 0 -> 5431296 bytes src/tests/rust_guests/simpleguest/src/main.rs | 143 +++++ 11 files changed, 1606 insertions(+), 42 deletions(-) create mode 100644 .github/workflows/RegenSnapshotGoldens.yml create mode 100644 docs/snapshot-golden-tests-plan.md create mode 100644 src/hyperlight_host/src/sandbox/snapshot/abi_tripwires.rs create mode 100644 src/hyperlight_host/src/sandbox/snapshot/golden_tests.rs create mode 100644 src/hyperlight_host/tests/snapshot_goldens/fixtures/README.md create mode 100644 src/hyperlight_host/tests/snapshot_goldens/fixtures/call_kvm.hls create mode 100644 src/hyperlight_host/tests/snapshot_goldens/fixtures/init_kvm.hls diff --git a/.github/workflows/RegenSnapshotGoldens.yml b/.github/workflows/RegenSnapshotGoldens.yml new file mode 100644 index 000000000..fedca58cc --- /dev/null +++ b/.github/workflows/RegenSnapshotGoldens.yml @@ -0,0 +1,92 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json + +name: Regenerate Snapshot Goldens + +on: + pull_request: + types: [labeled] + +permissions: + contents: read + pull-requests: read + +defaults: + run: + shell: bash + +jobs: + # Build guests once, upload as artifacts for the regen jobs to + # download. Mirrors `build-guests` in `ValidatePullRequest.yml`. + build-guests: + if: github.event.label.name == 'regen-goldens' + strategy: + fail-fast: false + matrix: + config: [debug] + uses: ./.github/workflows/dep_build_guests.yml + secrets: inherit + with: + docs_only: "false" + config: ${{ matrix.config }} + + regen: + if: github.event.label.name == 'regen-goldens' + needs: [build-guests] + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + hypervisor: ['hyperv-ws2025', mshv3, kvm] + cpu: [amd, intel] + runs-on: ${{ fromJson( + format('["self-hosted", "{0}", "X64", "1ES.Pool=hld-{1}-{2}", "JobId=regen-goldens-{3}-{4}-{5}-{6}"]', + matrix.hypervisor == 'hyperv-ws2025' && 'Windows' || 'Linux', + matrix.hypervisor == 'hyperv-ws2025' && 'win2025' || matrix.hypervisor == 'mshv3' && 'azlinux3-mshv' || matrix.hypervisor, + matrix.cpu, + matrix.hypervisor, + github.run_id, + github.run_number, + github.run_attempt)) }} + steps: + - uses: actions/checkout@v6 + + - uses: hyperlight-dev/ci-setup-workflow@v1.9.0 + with: + rust-toolchain: "1.89" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Fix cargo home permissions + if: runner.os == 'Linux' + run: | + sudo chown -R $(id -u):$(id -g) /opt/cargo || true + + - name: Rust cache + uses: Swatinem/rust-cache@v2 + with: + shared-key: "${{ runner.os }}-debug" + cache-on-failure: "true" + + - name: Download Rust guests + uses: actions/download-artifact@v8 + with: + name: rust-guests-debug + path: src/tests/rust_guests/bin/debug/ + + - name: Run regen + env: + HYPERLIGHT_REGEN_GOLDENS: "1" + run: | + cargo test -p hyperlight-host --lib \ + sandbox::snapshot::golden_tests::golden_regen \ + -- --nocapture + + - name: Upload regenerated fixtures + uses: actions/upload-artifact@v4 + with: + name: goldens-${{ matrix.hypervisor }}-${{ matrix.cpu }} + path: src/hyperlight_host/tests/snapshot_goldens/fixtures/*.hls + # Fail loudly if the regen produced nothing rather than + # silently uploading an empty artifact. + if-no-files-found: error + retention-days: 14 diff --git a/docs/snapshot-golden-tests-plan.md b/docs/snapshot-golden-tests-plan.md new file mode 100644 index 000000000..bd4475da7 --- /dev/null +++ b/docs/snapshot-golden-tests-plan.md @@ -0,0 +1,460 @@ +# Snapshot golden tests: design and plan + +This document describes the design of golden snapshot tests for hyperlight's +on-disk snapshot file format (`Snapshot::to_file` / `Snapshot::from_file`). + +The goal is to catch silent breaks of the snapshot ABI before they ship. +Currently only two version numbers (`FormatVersion` for the header, and +`SNAPSHOT_ABI_VERSION` for the memory blob) defend the format, and both +require manual maintainer discipline to bump. Golden tests automate that +discipline. + +## Two tiers of tests + +### Tier 1: byte-layout assertions (no fixture, no hypervisor) + +Pure compile-time-style assertions over the on-disk struct layout. No +fixture file, no hypervisor required. Cheap, exhaustive, and never out of +date. + +Asserts: + +* Sizes of `RawPreamble`, `RawHeaderV1`, `RawSegmentRegister`, + `RawTableRegister`, `RawSregs`, `RawHashes`, `FIXED_PREFIX_SIZE`. +* Field offsets in every raw struct (caught by `offset_of!`). +* Constants: `SNAPSHOT_MAGIC`, `SNAPSHOT_ABI_VERSION`, + `FormatVersion::V1`, `ArchTag::*`, `HypervisorTag::*` discriminants. +* `NextAction` tag round-trip (Initialise -> 0, Call -> 1). +* `HyperlightPEB` field offsets and total size, + `GuestMemoryRegion::SERIALIZED_SIZE`. + +If any of these change without a deliberate update, Tier 1 fails. The +maintainer must either update the test (and bump version constants) or +back the change out. + +### Tier 2: golden fixture tests (one fixture per arch+hv) + +End-to-end load-and-call tests against checked-in `.hls.zst` snapshot +files. Catches everything Tier 1 cannot: + +* Memory blob ABI semantics (PEB contents, layout arithmetic on reload). +* Hash input order (a different concatenation order would change + `header_hash` even with same fields). +* Initialise-path entry convention. +* Call-path sregs apply convention. +* Dispatch convention. +* Hypercall port numbers. +* Guest-call wire format. +* Host-function flatbuffer schema. +* Page table relocation. +* Stack/BSS/heap captured contents. + +## ABI surfaces enumerated (A-P) + +Every distinct way a snapshot could break, labelled A-P. Each surface +is annotated with which test tier catches it and which fixture exercises +it. Missing a surface means a silent break would ship. + +### A. File header surface (Tier 1) + +Sizes, offsets, and discriminant values of: + +* `RawPreamble`, `RawHeaderV1`, `RawSregs`, `RawSegmentRegister`, + `RawTableRegister`, `RawHashes`, `FIXED_PREFIX_SIZE`. +* `SNAPSHOT_MAGIC`, `SNAPSHOT_ABI_VERSION`, `FormatVersion::V1`, + `ArchTag::*`, `HypervisorTag::*`, `NextAction` tag values. +* `HyperlightPEB` field offsets and total size, + `GuestMemoryRegion::SERIALIZED_SIZE`. + +A change here that doesn't bump `FormatVersion` (or `SNAPSHOT_ABI_VERSION` +for the PEB) is a silent break. Tier 1 catches it without a fixture. + +### B. Memory blob layout (Tier 2: any golden) + +Region order and arithmetic in `SandboxMemoryLayout`: + +``` +0x1000 Code (code_size, R+W+X) + PEB (1 page, R+W on default; R only on regular config) + Heap (heap_size, R+W or R+W+X with executable_heap) + InitData (init_data_size, init_data_permissions) +``` + +Plus the PT tail appended past the guest-visible KVM slot. + +Key arithmetic: + +* `peb_offset = code_size.next_multiple_of(4096)` +* `peb_address = BASE_ADDRESS + peb_offset` = `0x1000 + peb_offset` +* `guest_heap_buffer_offset = (peb_offset + size_of::()).next_multiple_of(4096)` +* `init_data_offset = (guest_heap_buffer_offset + heap_size).next_multiple_of(4096)` +* `scratch_base_gpa(scratch_size) = MAX_GPA - scratch_size + 1` +* `scratch_base_gva(scratch_size) = MAX_GVA - scratch_size + 1` + +If any of these change, the captured blob has data at the OLD addresses +but the reloaded layout expects the NEW addresses. Caught by any golden. + +### C. PEB contents (Tier 2: any golden) + +The bytes the host writes into the PEB region during `write_peb`: + +* `input_stack`: { size = input_data_size, ptr = scratch_base_gva(scratch_size) } +* `output_stack`: { size = output_data_size, ptr = scratch_base_gva + input_data_size } +* `init_data`: { size = unaligned_memory_size - init_data_offset, ptr = BASE_ADDRESS + init_data_offset } +* `guest_heap`: { size = heap_size, ptr = BASE_ADDRESS + guest_heap_buffer_offset } + +If field order, ptr/size encoding, or any address calculation changes, +the captured PEB bytes will be wrong on load. Caught by any golden that +calls a guest fn (which requires the PEB to be correct). + +### D. Hypercall constants (Tier 2: F1, F4, F5, F6, F7) + +From `OutBAction` in `outb.rs`: + +* Log = 99 +* CallFunction = 101 +* Abort = 102 +* DebugPrint = 103 + +If any of these port numbers change without an ABI bump, an old guest +blob issues `out 101` and the new host listens for `out 99`. Caught by +any golden that calls a host fn (`Add`, `PrintOutput`, etc.). + +### E. Initialise entry calling convention (Tier 2: F1, F2, F3) + +`vm.initialise` sets up registers per `hyperlight_vm/x86_64.rs::initialise()`: + +``` +RIP = entrypoint_addr (from snapshot) +RSP = stack_top_gva - 8 +RDI = peb_addr +RSI = seed +RDX = page_size +RCX = guest_log_filter +``` + +Guest's `generic_init` consumes these from the same registers. A change +without an ABI bump lands the guest in old code expecting old register +positions. Caught by any Initialise-kind golden. + +### F. Dispatch call calling convention (Tier 2: F4, F5, F6, F7, F8) + +`dispatch_call_from_host` jumps to a captured `entrypoint_addr` (RIP) +which is the dispatch function. Stack frame at top of stack from prior +captured RSP. Any change to the dispatch ABI breaks Call snapshots. + +### G. Guest-call wire format (Tier 2: F6) + +Flatbuffer schema for `FunctionCall` and `FunctionCallResult`. Args are +encoded as `ParameterValue` union with 9 variants: + +* hlint (i32), hluint (u32), hllong (i64), hlulong (u64), hlfloat (f32), + hldouble (f64), hlstring, hlbool, hlvecbytes + +Returns add `hlvoid` (10 return variants total). + +A schema change in any cell breaks that arg type. F6 exercises every +variant in both arg and return position via `EchoT(value) == value` +calls. + +### H. Host function signatures wire format (Tier 2: F7) + +`HostFunctionDetails` flatbuffer persisted on disk. Schema: + +``` +HostFunctionDefinition { + function_name: string, + parameters: [ParameterType], + return_type: ReturnType, +} +``` + +ParameterType is u8 enum with 9 values; ReturnType u8 with 10. Wrong +serialization causes `validate_host_functions` to reject a correct +registration on load. F7 exercises every primitive type as a host fn +parameter and return. + +### I. sregs apply convention (Tier 2: F4, F5, F7, F8) + +`apply_sregs(cr3, sregs)` overrides `sregs.cr3` with the new relocated +PT base, then writes everything else. Captured CR3 is intentionally NOT +used. The rest matters: + +* All 8 segment registers (cs/ds/es/fs/gs/ss/tr/ldt) including hidden + cache fields (unusable, type, granularity, db). +* GDT + IDT base/limit. +* CR0/CR2/CR4/CR8 control bits. +* EFER (LMA, LME, SCE, NX matter on x86_64). +* APIC base. +* interrupt_bitmap (32 bytes). + +Caught by any Call golden (resume requires sregs to apply correctly). + +### J. PT relocation (Tier 2: F4, F5) + +The captured page tables in the blob are relocated during `Snapshot::new` +to a new physical address, then on restore they're copied to scratch +and CR3 points there. If the PTE encoding, self-map, or relocation +arithmetic changes, walks fail. F5 (heap activity, may add PT pages +mid-execution) gives the most thorough exercise. + +### K. Init data round-trip (Tier 2: F2) + +`write_init_data` copies bytes verbatim into the init_data region. If +the region offset or permission bits get reinterpreted, init data lands +at the wrong address or gets the wrong protection. F2 exercises both: +known bytes round-trip + explicit `MemoryRegionFlags` permissions. + +### L. Layout-arithmetic on reload (Tier 2: F3) + +Reload reconstructs `SandboxMemoryLayout` via `SandboxMemoryLayout::new( +cfg, code_size, init_data_size, init_data_permissions)`, then calls +`set_pt_size` and `set_snapshot_size`. If any computation in `new` +changes (for example `min_scratch_size`), reload computes different +addresses than the captured blob has, even if the blob itself is +unchanged. F3 exercises this with non-default sizes for input/output/ +heap/scratch, where any silent shift in the arithmetic moves region +boundaries differently. + +### M. Stack contents (Tier 2: F4, F5, F7, F8) + +A `Call` snapshot is taken at the top of `dispatch_function` after a +halt. The stack contains return addresses pointing into guest code. If +those code addresses move, restore lands in the wrong instructions. Any +Call golden exercises this; F4 (after non-trivial guest call) is the +most basic case. + +### N. Static (BSS) state (Tier 2: F4, F8) + +`COUNTER` lives in BSS in the code region. Snapshot captures the bytes; +reload writes them back. Catches "BSS region moved" or "writes to BSS +not captured during snapshot". F4 sets COUNTER to 42 then snapshots and +asserts on reload. + +### O. Heap state (Tier 2: F5) + +Heap allocator is `LockedHeap` initialized at startup with +`(*peb_ptr).guest_heap.ptr` as its base. A change to the heap allocator +that affects the on-heap data structures would mean the captured +allocator state is invalid on resume. F5 allocates a `Vec` with a +known pattern, pins it in a static, snapshots, and asserts the bytes +read back identically. + +### P. Snapshot-then-snapshot chain (Tier 2: F8) + +After loading and running, taking another snapshot must produce a +working snapshot. Catches "load did not properly reconstruct invariants +needed by `snapshot()`". F8 generates this on the fly from F4 plus a +state mutation, snapshots that, reloads, asserts. + +## Fixture matrix + +Two checked-in fixtures per (arch, hypervisor). Each one bundles +every surface that needs end-to-end coverage for its snapshot kind. +Per-surface assertions live in many small `#[test]` functions +against the loaded sandbox, so a failure points to one specific +surface even though all tests share two underlying fixture files. + +### F-init: `init` + +* Snapshot kind: Initialise (preinit). No host fns. +* Build configuration: non-default `input_data_size`, + `output_data_size`, `heap_size`, `scratch_size`. Init-data blob + with a known byte pattern + explicit `MemoryRegionFlags::READ` + permissions. +* Tests against this fixture: + * `init_basic_call` (A, B, C, D, E, N): `GetStatic() == 0` after + re-running guest init. + * `init_data_round_trip` (K): guest reads init_data via + `ReadFromUserMemory(num, expected)`. + * `init_custom_layout_works` (L): `Echo("custom-layout") == + "custom-layout"`. + +### F-call: `call` + +* Snapshot kind: Call (mid-execution). +* Setup before snapshot: register the `HostEcho*` family, + `evolve()`, then `AddToStatic(42)`, + `AllocAndWritePattern(1024)`, then call each + `RoundTripHostT(initial_value)` once. +* Tests against this fixture: + * `call_captured_bss` (F, I, J, M, N): `GetStatic() == 42`. + * `call_captured_heap_pattern` (O): `ReadPattern() == + expected_bytes`. + * `call_guest_types_round_trip` (G): for each primitive `T` + (`i32`, `u32`, `i64`, `u64`, `f32`, `f64`, `bool`, `String`, + `Vec`, `()`), call `EchoT(value)` and assert it + round-trips. Includes extremes (i32::MIN/MAX, NaN, infinities, + empty String/Vec) plus `PrintElevenArgs(...)` for the + multi-arg path. + * `call_host_round_trips` (H, D, G return path): for each + primitive `T`, register the matching `HostEchoT` host fn at + load time, then call `RoundTripHostT(value)` and assert it + round-trips through the host. + * `call_chained_snapshot` (P): load F-call, mutate state, take a + fresh snapshot, write to a tempfile, load it back, assert. + Generated on the fly; not checked in. + +### Coverage matrix + +| | F-init | F-call | +|---|--------|--------| +| A | ✓ load | ✓ load | +| B | ✓ | ✓ | +| C | ✓ | ✓ | +| D | ✓ | ✓ | +| E | ✓ | | +| F | | ✓ | +| G | | ✓ | +| H | | ✓ | +| I | | ✓ | +| J | | ✓ | +| K | ✓ | | +| L | ✓ | | +| M | | ✓ | +| N | ✓ | ✓ | +| O | | ✓ | +| P | | ✓ | + +## Type matrix + +Existing simpleguest functions covering each primitive arg/ret type: + +| Type | Existing | Need to add | +|---|---|---| +| `i32` | `Add`, `AddToStatic` | `EchoI32` for clean echo | +| `u32` | none | `EchoU32` | +| `i64` | none | `EchoI64` | +| `u64` | `GetDr0`, `SetDr0` | `EchoU64` | +| `f32` | `EchoFloat` ✓ | none | +| `f64` | `EchoDouble` ✓ | none | +| `bool` | `CheckMapped` (no bool arg) | `EchoBool` | +| `String` | `Echo` ✓ | none | +| `Vec` | `GetSizePrefixedBuffer` ✓ | none | +| `()` | `Spin`, `TriggerException` | optional `NoOp` | +| Multi-arg (1-11) | `PrintTwoArgs..PrintElevenArgs` ✓ | none | + +New simpleguest functions: + +```rust +#[guest_function("EchoI32")] fn echo_i32(v: i32) -> i32 { v } +#[guest_function("EchoU32")] fn echo_u32(v: u32) -> u32 { v } +#[guest_function("EchoI64")] fn echo_i64(v: i64) -> i64 { v } +#[guest_function("EchoU64")] fn echo_u64(v: u64) -> u64 { v } +#[guest_function("EchoBool")] fn echo_bool(v: bool) -> bool { v } +``` + +Round-trip via host (for F7): + +```rust +#[host_function("HostEchoI32")] fn host_echo_i32(v: i32) -> i32; +// ... one per primitive type +#[guest_function("RoundTripHostI32")] fn rt_i32(v: i32) -> Result { host_echo_i32(v) } +// ... one per primitive type +``` + +Heap allocation pattern (for F5): + +```rust +static mut HEAP_BUF: Option> = None; +#[guest_function("AllocAndWritePattern")] fn alloc_and_write(len: u64) { ... } +#[guest_function("ReadPattern")] fn read_pattern() -> Vec { ... } +``` + +## On-disk file layout + +``` +src/hyperlight_host/tests/snapshot_goldens/fixtures/ + init_kvm.hls + init_mshv.hls + init_whp.hls + call_kvm.hls + call_mshv.hls + call_whp.hls + README.md (regen instructions) +``` + +Per-HV: tests skip if no matching fixture for the local HV. CI matrices +ensure each HV is exercised by at least one job. + +Files are committed uncompressed. Each fixture is roughly 5 MB +(simpleguest with the kitchen-sink configuration). 2 fixtures × 3 HVs +~30 MB total when fully populated. We start with KVM only (~10 MB) +and add HVs as CI exercises them. + +## Test scaffolding + +Per-HV skip pattern. A test runner per fixture, all sharing the same +shape: + +```rust +fn run_golden( + fixture_name: &str, + register_fns: impl FnOnce(&mut HostFunctions), + check: impl FnOnce(&mut MultiUseSandbox), +## Test scaffolding + +Lives next to the existing `file_tests.rs` and `abi_tripwires.rs` +in `src/hyperlight_host/src/sandbox/snapshot/golden_tests.rs`. As +a unit-test module it has access to `pub(crate)` items +(`Snapshot::from_env`, `Registerable`, etc.) without exposing new +public API. + +Per-HV skip pattern. A `load_golden(name, register_fns)` helper +detects the local hypervisor, looks for `{name}_{hv}.hls`, returns +`None` if missing so the test can `let Some(sbox) = ... else { +return };`. Tests that don't match the local HV silently skip. +CI matrices ensure each HV is exercised in at least one job. + +## Regeneration story + +A single `#[test]` named `golden_regen` rewrites the fixtures. +Gated behind `HYPERLIGHT_REGEN_GOLDENS`: + +* not set: skips silently. +* `=1`: writes any fixture that does not yet exist for the local + HV, refuses to overwrite existing ones. +* `=force`: same but overwrites. + +Run via: + +``` +HYPERLIGHT_REGEN_GOLDENS=1 cargo test -p hyperlight-host \ + --lib sandbox::snapshot::golden_tests::golden_regen -- --nocapture +``` + +Documentation in fixtures/README.md: when to regenerate (any change +to header constants, ABI version, PEB layout, layout arithmetic, +or guest startup), and the recipe to run. + +## Git considerations + +* Fixtures committed uncompressed. Git auto-detects them as + binary so diffs are clean. +* Regenerating golden snapshots is a separate, dedicated PR (not + bundled with the change that required the bump). Keeps the diff + focused. +* Do not use Git LFS. Total size is ~10 MB per HV today, ~30 MB + fully populated. Well below the threshold where LFS becomes + worthwhile. + +## Implementation order + +1. Tier 1 layout assertions (standalone, no fixtures). +2. Add EchoX, HostEchoX, RoundTripHostX guest functions to + simpleguest. +3. Test scaffolding (`load_golden`, `golden_regen`). +4. `init` + its tests. +5. `call` + its tests. + +## Known gaps (out of scope) + +* FPU/XMM register state: not in `CommonSpecialRegisters`. xsave is not + persisted in the snapshot today. If guest behaviour ever depends on + captured FPU state, the snapshot itself needs to grow that field. + not a versioning issue. +* Hypervisor-internal state like APIC pending interrupts. +* Cross-OS goldens: a Linux KVM snapshot loaded on a Linux+MSHV-only host + triggers the existing hypervisor-mismatch error path. Already covered + by `hypervisor_mismatch_rejected`. +* nanvix-unstable feature: deprecated, intentionally not covered. diff --git a/src/hyperlight_host/src/sandbox/snapshot/abi_tripwires.rs b/src/hyperlight_host/src/sandbox/snapshot/abi_tripwires.rs new file mode 100644 index 000000000..e34b9dc33 --- /dev/null +++ b/src/hyperlight_host/src/sandbox/snapshot/abi_tripwires.rs @@ -0,0 +1,213 @@ +/* +Copyright 2025 The Hyperlight Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +//! Compile-time assertions over the snapshot file's on-disk byte +//! layout. Any change that fires one of these is, by definition, a +//! snapshot file format change. The maintainer must either: +//! +//! 1. Bump [`super::file::FormatVersion`] (and arrange to read the +//! old format), if only the header layout has changed. +//! 2. Bump [`super::file::SNAPSHOT_ABI_VERSION`], if the change +//! affects the interpretation of the memory blob (e.g. PEB +//! layout). +//! 3. Update the assertion to match the new value, if the change is +//! deliberate and you have already bumped the relevant version. +//! +//! These are exhaustive for the file header. The memory blob also +//! has implicit invariants (PEB layout, hypercall port numbers, +//! layout arithmetic, sregs apply convention, etc.) that are +//! checked by the golden snapshot tests under +//! `tests/snapshot_goldens/`. +//! +//! All values below are in bytes. All offsets are 0-based within +//! their containing struct. All discriminants are the on-disk u32 +//! or u64 representation, not the source-level enum order. + +use super::file::{ + ArchTag, FIXED_PREFIX_SIZE, FormatVersion, HypervisorTag, RawHashes, RawHeaderV1, RawPreamble, + RawSegmentRegister, RawSregs, RawTableRegister, SNAPSHOT_ABI_VERSION, SNAPSHOT_MAGIC, +}; + +// Magic and version constants. +const _: () = { + assert!(SNAPSHOT_MAGIC[0] == b'H'); + assert!(SNAPSHOT_MAGIC[1] == b'L'); + assert!(SNAPSHOT_MAGIC[2] == b'S'); + assert!(SNAPSHOT_MAGIC[3] == 0); + assert!(SNAPSHOT_ABI_VERSION == 1); + assert!(FormatVersion::V1 as u32 == 1); +}; + +// Architecture tag discriminants. +const _: () = { + assert!(ArchTag::X86_64 as u64 == 1); + assert!(ArchTag::Aarch64 as u64 == 2); + assert!(ArchTag::I686 as u64 == 3); +}; + +// Hypervisor tag discriminants. +const _: () = { + assert!(HypervisorTag::Kvm as u64 == 1); + assert!(HypervisorTag::Mshv as u64 == 2); + assert!(HypervisorTag::Whp as u64 == 3); +}; + +// `RawPreamble` byte layout. +const _: () = { + assert!(std::mem::size_of::() == 8); + assert!(std::mem::offset_of!(RawPreamble, magic) == 0); + assert!(std::mem::offset_of!(RawPreamble, format_version) == 4); +}; + +// `RawHeaderV1` byte layout. Field order, offsets, total size. +const _: () = { + assert!(std::mem::size_of::() == 19 * 8); + assert!(std::mem::offset_of!(RawHeaderV1, arch) == 0); + assert!(std::mem::offset_of!(RawHeaderV1, abi_version) == 8); + assert!(std::mem::offset_of!(RawHeaderV1, stack_top_gva) == 16); + assert!(std::mem::offset_of!(RawHeaderV1, entrypoint_tag) == 24); + assert!(std::mem::offset_of!(RawHeaderV1, entrypoint_addr) == 32); + assert!(std::mem::offset_of!(RawHeaderV1, input_data_size) == 40); + assert!(std::mem::offset_of!(RawHeaderV1, output_data_size) == 48); + assert!(std::mem::offset_of!(RawHeaderV1, heap_size) == 56); + assert!(std::mem::offset_of!(RawHeaderV1, code_size) == 64); + assert!(std::mem::offset_of!(RawHeaderV1, init_data_size) == 72); + assert!(std::mem::offset_of!(RawHeaderV1, init_data_permissions) == 80); + assert!(std::mem::offset_of!(RawHeaderV1, scratch_size) == 88); + assert!(std::mem::offset_of!(RawHeaderV1, snapshot_size) == 96); + assert!(std::mem::offset_of!(RawHeaderV1, pt_size) == 104); + assert!(std::mem::offset_of!(RawHeaderV1, memory_size) == 112); + assert!(std::mem::offset_of!(RawHeaderV1, memory_offset) == 120); + assert!(std::mem::offset_of!(RawHeaderV1, has_sregs) == 128); + assert!(std::mem::offset_of!(RawHeaderV1, hypervisor) == 136); + assert!(std::mem::offset_of!(RawHeaderV1, host_funcs_size) == 144); +}; + +// `RawSegmentRegister` byte layout. +const _: () = { + assert!(std::mem::size_of::() == 13 * 8); + assert!(std::mem::offset_of!(RawSegmentRegister, base) == 0); + assert!(std::mem::offset_of!(RawSegmentRegister, limit) == 8); + assert!(std::mem::offset_of!(RawSegmentRegister, selector) == 16); + assert!(std::mem::offset_of!(RawSegmentRegister, type_) == 24); + assert!(std::mem::offset_of!(RawSegmentRegister, present) == 32); + assert!(std::mem::offset_of!(RawSegmentRegister, dpl) == 40); + assert!(std::mem::offset_of!(RawSegmentRegister, db) == 48); + assert!(std::mem::offset_of!(RawSegmentRegister, s) == 56); + assert!(std::mem::offset_of!(RawSegmentRegister, l) == 64); + assert!(std::mem::offset_of!(RawSegmentRegister, g) == 72); + assert!(std::mem::offset_of!(RawSegmentRegister, avl) == 80); + assert!(std::mem::offset_of!(RawSegmentRegister, unusable) == 88); + assert!(std::mem::offset_of!(RawSegmentRegister, padding) == 96); +}; + +// `RawTableRegister` byte layout. +const _: () = { + assert!(std::mem::size_of::() == 16); + assert!(std::mem::offset_of!(RawTableRegister, base) == 0); + assert!(std::mem::offset_of!(RawTableRegister, limit) == 8); +}; + +// `RawSregs` byte layout. 8 segment regs + 2 table regs + 7 control +// regs (cr0/cr2/cr3/cr4/cr8/efer/apic_base) + 4 u64s of bitmap. +const _: () = { + assert!( + std::mem::size_of::() + == 8 * std::mem::size_of::() + + 2 * std::mem::size_of::() + + 7 * 8 + + 4 * 8 + ); + assert!(std::mem::offset_of!(RawSregs, cs) == 0); + assert!(std::mem::offset_of!(RawSregs, ds) == 104); + assert!(std::mem::offset_of!(RawSregs, es) == 208); + assert!(std::mem::offset_of!(RawSregs, fs) == 312); + assert!(std::mem::offset_of!(RawSregs, gs) == 416); + assert!(std::mem::offset_of!(RawSregs, ss) == 520); + assert!(std::mem::offset_of!(RawSregs, tr) == 624); + assert!(std::mem::offset_of!(RawSregs, ldt) == 728); + assert!(std::mem::offset_of!(RawSregs, gdt) == 832); + assert!(std::mem::offset_of!(RawSregs, idt) == 848); + assert!(std::mem::offset_of!(RawSregs, cr0) == 864); + assert!(std::mem::offset_of!(RawSregs, cr2) == 872); + assert!(std::mem::offset_of!(RawSregs, cr3) == 880); + assert!(std::mem::offset_of!(RawSregs, cr4) == 888); + assert!(std::mem::offset_of!(RawSregs, cr8) == 896); + assert!(std::mem::offset_of!(RawSregs, efer) == 904); + assert!(std::mem::offset_of!(RawSregs, apic_base) == 912); + assert!(std::mem::offset_of!(RawSregs, interrupt_bitmap) == 920); +}; + +// `RawHashes` byte layout. +const _: () = { + assert!(std::mem::size_of::() == 64); + assert!(std::mem::offset_of!(RawHashes, header_hash) == 0); + assert!(std::mem::offset_of!(RawHashes, blob_hash) == 32); +}; + +// Total fixed prefix size. With the values above this is: +// 8 (preamble) + 152 (header) + 952 (sregs) + 64 (hashes) = 1176. +const _: () = { + assert!(FIXED_PREFIX_SIZE == 8 + 152 + 952 + 64); + assert!(FIXED_PREFIX_SIZE == 1176); +}; + +// PEB layout. Lives in the memory blob, not the file header, so +// changing it requires bumping `SNAPSHOT_ABI_VERSION` rather than +// `FormatVersion`. Asserted here because it is the closest single +// place where snapshot-format invariants live. +// +// `nanvix-unstable` adds a `file_mappings` field after `guest_heap`, +// so the size and field count differ. Both shapes are pinned below. +#[cfg(not(feature = "nanvix-unstable"))] +const _: () = { + use hyperlight_common::mem::{GuestMemoryRegion, HyperlightPEB}; + // GuestMemoryRegion is two u64s. + assert!(std::mem::size_of::() == 16); + assert!(GuestMemoryRegion::SERIALIZED_SIZE == 16); + // HyperlightPEB has 4 GuestMemoryRegions back-to-back. + assert!(std::mem::size_of::() == 4 * 16); + assert!(std::mem::offset_of!(HyperlightPEB, input_stack) == 0); + assert!(std::mem::offset_of!(HyperlightPEB, output_stack) == 16); + assert!(std::mem::offset_of!(HyperlightPEB, init_data) == 32); + assert!(std::mem::offset_of!(HyperlightPEB, guest_heap) == 48); +}; + +#[cfg(feature = "nanvix-unstable")] +const _: () = { + use hyperlight_common::mem::{GuestMemoryRegion, HyperlightPEB}; + assert!(std::mem::size_of::() == 16); + assert!(GuestMemoryRegion::SERIALIZED_SIZE == 16); + // With `nanvix-unstable`, HyperlightPEB has 5 GuestMemoryRegions: + // the four above plus `file_mappings` at the end. + assert!(std::mem::size_of::() == 5 * 16); + assert!(std::mem::offset_of!(HyperlightPEB, input_stack) == 0); + assert!(std::mem::offset_of!(HyperlightPEB, output_stack) == 16); + assert!(std::mem::offset_of!(HyperlightPEB, init_data) == 32); + assert!(std::mem::offset_of!(HyperlightPEB, guest_heap) == 48); + assert!(std::mem::offset_of!(HyperlightPEB, file_mappings) == 64); +}; + +// Hypercall port numbers. Live in the captured guest binary; if +// these change without an `SNAPSHOT_ABI_VERSION` bump, an old +// snapshot's guest will issue OUT to the wrong port. +const _: () = { + use hyperlight_common::outb::OutBAction; + assert!(OutBAction::Log as u16 == 99); + assert!(OutBAction::CallFunction as u16 == 101); + assert!(OutBAction::Abort as u16 == 102); + assert!(OutBAction::DebugPrint as u16 == 103); +}; diff --git a/src/hyperlight_host/src/sandbox/snapshot/file.rs b/src/hyperlight_host/src/sandbox/snapshot/file.rs index 1e99be3f3..a89de03a9 100644 --- a/src/hyperlight_host/src/sandbox/snapshot/file.rs +++ b/src/hyperlight_host/src/sandbox/snapshot/file.rs @@ -71,7 +71,7 @@ use crate::hypervisor::regs::CommonSpecialRegisters; use crate::mem::layout::SandboxMemoryLayout; use crate::mem::shared_mem::{ReadonlySharedMemory, SharedMemory}; -const SNAPSHOT_MAGIC: &[u8; 4] = b"HLS\0"; +pub(super) const SNAPSHOT_MAGIC: &[u8; 4] = b"HLS\0"; /// ABI version for the snapshot memory blob. This must be bumped /// whenever a change affects the contents or interpretation of the @@ -93,7 +93,7 @@ const SNAPSHOT_MAGIC: &[u8; 4] = b"HLS\0"; /// and may allow conversion between versions), an ABI mismatch means /// the memory blob is incompatible and the snapshot must be /// regenerated from the guest binary. -const SNAPSHOT_ABI_VERSION: u64 = 1; +pub(super) const SNAPSHOT_ABI_VERSION: u64 = 1; /// Maximum size of the host-functions flatbuffer blob in a snapshot /// file. Bounds the allocation done at load time before the @@ -103,7 +103,7 @@ const MAX_HOST_FUNCS_SIZE: u64 = 1024 * 1024; /// Snapshot file format version. #[derive(Copy, Clone, Debug, PartialEq)] -enum FormatVersion { +pub(super) enum FormatVersion { V1 = 1, } @@ -122,7 +122,7 @@ impl FormatVersion { /// Architecture tag for snapshot files. #[derive(Copy, Clone, Debug, PartialEq)] -enum ArchTag { +pub(super) enum ArchTag { X86_64 = 1, Aarch64 = 2, I686 = 3, @@ -288,50 +288,50 @@ pub(super) struct RawHeaderV1 { #[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)] #[repr(C)] -struct RawSegmentRegister { - base: u64, - limit: u64, - selector: u64, - type_: u64, - present: u64, - dpl: u64, - db: u64, - s: u64, - l: u64, - g: u64, - avl: u64, - unusable: u64, - padding: u64, +pub(super) struct RawSegmentRegister { + pub(super) base: u64, + pub(super) limit: u64, + pub(super) selector: u64, + pub(super) type_: u64, + pub(super) present: u64, + pub(super) dpl: u64, + pub(super) db: u64, + pub(super) s: u64, + pub(super) l: u64, + pub(super) g: u64, + pub(super) avl: u64, + pub(super) unusable: u64, + pub(super) padding: u64, } #[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)] #[repr(C)] -struct RawTableRegister { - base: u64, - limit: u64, +pub(super) struct RawTableRegister { + pub(super) base: u64, + pub(super) limit: u64, } #[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)] #[repr(C)] -struct RawSregs { - cs: RawSegmentRegister, - ds: RawSegmentRegister, - es: RawSegmentRegister, - fs: RawSegmentRegister, - gs: RawSegmentRegister, - ss: RawSegmentRegister, - tr: RawSegmentRegister, - ldt: RawSegmentRegister, - gdt: RawTableRegister, - idt: RawTableRegister, - cr0: u64, - cr2: u64, - cr3: u64, - cr4: u64, - cr8: u64, - efer: u64, - apic_base: u64, - interrupt_bitmap: [u64; 4], +pub(super) struct RawSregs { + pub(super) cs: RawSegmentRegister, + pub(super) ds: RawSegmentRegister, + pub(super) es: RawSegmentRegister, + pub(super) fs: RawSegmentRegister, + pub(super) gs: RawSegmentRegister, + pub(super) ss: RawSegmentRegister, + pub(super) tr: RawSegmentRegister, + pub(super) ldt: RawSegmentRegister, + pub(super) gdt: RawTableRegister, + pub(super) idt: RawTableRegister, + pub(super) cr0: u64, + pub(super) cr2: u64, + pub(super) cr3: u64, + pub(super) cr4: u64, + pub(super) cr8: u64, + pub(super) efer: u64, + pub(super) apic_base: u64, + pub(super) interrupt_bitmap: [u64; 4], } /// Integrity hashes for corruption detection. Not signatures: a diff --git a/src/hyperlight_host/src/sandbox/snapshot/golden_tests.rs b/src/hyperlight_host/src/sandbox/snapshot/golden_tests.rs new file mode 100644 index 000000000..af77fb55e --- /dev/null +++ b/src/hyperlight_host/src/sandbox/snapshot/golden_tests.rs @@ -0,0 +1,573 @@ +/* +Copyright 2025 The Hyperlight Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +//! Snapshot golden tests. +//! +//! Two checked-in fixtures exhaustively cover the on-disk snapshot +//! ABI. Each one bundles every surface that needs end-to-end +//! coverage for its snapshot kind, and many small `#[test]` +//! functions assert on individual surfaces against the loaded +//! sandbox. +//! +//! * `init`: Initialise (preinit) snapshot built with +//! non-default layout sizes plus an init-data blob. Covers the +//! header layout, layout arithmetic with non-default sizes, +//! PEB contents, the initialise entry calling convention, +//! init_data round-trip + permissions, and BSS init. +//! * `call`: Call (mid-execution) snapshot built +//! after the guest has bumped a static, allocated and pinned a +//! heap buffer with a known pattern, and round-tripped a value +//! through every primitive-typed host function. Covers the +//! dispatch convention, sregs apply, page-table relocation, +//! captured stack/BSS/heap, the host_function_details flatbuffer +//! schema, and every variant of the guest-call wire format. +//! +//! See `docs/snapshot-golden-tests-plan.md` for the full surface +//! enumeration (A-P) and which test covers which surface. +//! +//! ## Skipping +//! +//! At test time we detect the locally available hypervisor. If no +//! fixture is committed for that HV (e.g. KVM-only fixtures +//! present, test runs on WHP), the test silently skips with a +//! message. CI matrices ensure each HV is exercised by at least +//! one job. +//! +//! ## Regeneration +//! +//! Set `HYPERLIGHT_REGEN_GOLDENS=1` and run `cargo test +//! golden_regen` to overwrite every fixture for the locally +//! available hypervisor. Always overwrites; the test is +//! deliberate. See `tests/snapshot_goldens/fixtures/README.md` +//! for when this is needed. + +#![cfg(test)] + +use std::path::PathBuf; +use std::sync::Arc; + +use hyperlight_testing::simple_guest_as_string; + +use super::Snapshot; +use crate::func::Registerable; +use crate::sandbox::SandboxConfiguration; +use crate::sandbox::uninitialized::GuestEnvironment; +use crate::{GuestBinary, HostFunctions, MultiUseSandbox, UninitializedSandbox}; + +// ============================================================================ +// Scaffolding +// ============================================================================ + +/// Locally available hypervisor, detected at test-time. +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +#[allow(dead_code)] // not all variants used on every host OS +enum LocalHypervisor { + Kvm, + Mshv, + Whp, +} + +impl LocalHypervisor { + fn short_name(self) -> &'static str { + match self { + Self::Kvm => "kvm", + Self::Mshv => "mshv", + Self::Whp => "whp", + } + } + + /// Detect the locally available hypervisor by probing the + /// platform. Mirrors `hyperlight_host`'s own detection without + /// depending on its `pub(crate)` enums. + fn detect() -> Option { + #[cfg(target_os = "linux")] + { + // /dev/mshv takes priority over /dev/kvm to match + // `get_available_hypervisor`. + if std::path::Path::new("/dev/mshv").exists() { + return Some(Self::Mshv); + } + if std::path::Path::new("/dev/kvm").exists() { + return Some(Self::Kvm); + } + None + } + #[cfg(target_os = "windows")] + { + Some(Self::Whp) + } + #[cfg(not(any(target_os = "linux", target_os = "windows")))] + { + None + } + } +} + +fn fixtures_dir() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/snapshot_goldens/fixtures") +} + +/// Resolve the path to a fixture file for the current hypervisor. +/// Returns `None` if no hypervisor is available, or if the fixture +/// is missing from the checked-in set. +fn fixture_path(name: &str) -> Option { + let hv = LocalHypervisor::detect()?; + let path = fixtures_dir().join(format!("{}_{}.hls", name, hv.short_name())); + path.exists().then_some(path) +} + +/// Load a golden fixture and build a sandbox from it. +/// +/// Returns `None` to indicate the test should skip (no hypervisor +/// or no matching fixture). +fn load_golden( + name: &str, + register_fns: impl FnOnce(&mut HostFunctions), +) -> Option { + let path = match fixture_path(name) { + Some(p) => p, + None => { + eprintln!( + "snapshot_goldens: skipping {} (no fixture for local hypervisor)", + name, + ); + return None; + } + }; + let snap = Snapshot::from_file(&path) + .unwrap_or_else(|e| panic!("snapshot_goldens: failed to load {}: {}", path.display(), e)); + let mut funcs = HostFunctions::default(); + register_fns(&mut funcs); + let sbox = MultiUseSandbox::from_snapshot(Arc::new(snap), funcs, None).unwrap_or_else(|e| { + panic!( + "snapshot_goldens: from_snapshot failed for {}: {}", + path.display(), + e + ) + }); + Some(sbox) +} + +const INIT_FIXTURE: &str = "init"; +const CALL_FIXTURE: &str = "call"; + +/// Convenience for the Init fixture (no host fns to register). +fn load_init() -> Option { + load_golden(INIT_FIXTURE, |_| {}) +} + +/// Convenience for the Call fixture (always registers the +/// `HostEcho*` family that was registered when the fixture was +/// built). +fn load_call() -> Option { + load_golden(CALL_FIXTURE, register_host_echo_fns) +} + +// ============================================================================ +// Fixture builders +// ============================================================================ +// +// Each builder constructs the snapshot exactly as it should appear +// on disk for that fixture. Used both by the regen test (to write +// fixtures) and as documentation for what each fixture represents. + +/// Init data bytes pinned at module scope so the pattern is +/// identical between regen-time and load-time. +const INIT_DATA: &[u8] = b"hyperlight-snapshot-golden-init-data\0"; + +/// Heap pattern length used by the Call fixture. Small enough to +/// stay cheap, large enough to exercise non-trivial heap state. +const HEAP_PATTERN_LEN: u64 = 1024; + +fn build_init() -> Arc { + let path = simple_guest_as_string().unwrap(); + // Bump every layout knob away from defaults so any silent + // arithmetic change in `SandboxMemoryLayout::new` shifts at + // least one region. Sizes deliberately small to keep the + // fixture lean. + let mut cfg = SandboxConfiguration::default(); + cfg.set_input_data_size(64 * 1024); + cfg.set_output_data_size(64 * 1024); + cfg.set_heap_size(256 * 1024); + cfg.set_scratch_size(512 * 1024); + let env = GuestEnvironment::new(GuestBinary::FilePath(path), Some(INIT_DATA)); + Arc::new(Snapshot::from_env(env, cfg).unwrap()) +} + +fn build_call() -> Arc { + let path = simple_guest_as_string().unwrap(); + let mut u = UninitializedSandbox::new(GuestBinary::FilePath(path), None).unwrap(); + register_host_echo_fns(&mut u); + let mut sbox = u.evolve().unwrap(); + + // Bump COUNTER so we can assert on captured BSS state. + let _: i32 = sbox.call("AddToStatic", 42i32).unwrap(); + + // Allocate and pin a heap buffer so we can assert on captured + // heap state. + let _: () = sbox.call("AllocAndWritePattern", HEAP_PATTERN_LEN).unwrap(); + + // Invoke each host fn once before snapshotting. The persisted + // host_functions blob captures their signatures regardless, + // but exercising the call path here means a regression in the + // host-fn dispatch is more likely to surface during regen. + let _: i32 = sbox.call("RoundTripHostI32", 1234i32).unwrap(); + let _: u32 = sbox.call("RoundTripHostU32", 4321u32).unwrap(); + let _: i64 = sbox.call("RoundTripHostI64", -42i64).unwrap(); + let _: u64 = sbox.call("RoundTripHostU64", 1u64 << 40).unwrap(); + let _: f32 = sbox.call("RoundTripHostF32", 3.5f32).unwrap(); + let _: f64 = sbox.call("RoundTripHostF64", -2.25f64).unwrap(); + let _: bool = sbox.call("RoundTripHostBool", true).unwrap(); + let _: String = sbox.call("RoundTripHostString", "hi".to_string()).unwrap(); + let _: Vec = sbox.call("RoundTripHostVecBytes", vec![1u8, 2, 3]).unwrap(); + + sbox.snapshot().unwrap() +} + +/// Register the `HostEcho*` family of host functions on a +/// `Registerable`. Used both at fixture build time (against +/// `UninitializedSandbox`) and at load time (against +/// `HostFunctions`). +fn register_host_echo_fns(r: &mut R) { + r.register_host_function("HostEchoI32", |v: i32| Ok(v)) + .unwrap(); + r.register_host_function("HostEchoU32", |v: u32| Ok(v)) + .unwrap(); + r.register_host_function("HostEchoI64", |v: i64| Ok(v)) + .unwrap(); + r.register_host_function("HostEchoU64", |v: u64| Ok(v)) + .unwrap(); + r.register_host_function("HostEchoF32", |v: f32| Ok(v)) + .unwrap(); + r.register_host_function("HostEchoF64", |v: f64| Ok(v)) + .unwrap(); + r.register_host_function("HostEchoBool", |v: bool| Ok(v)) + .unwrap(); + r.register_host_function("HostEchoString", |v: String| Ok(v)) + .unwrap(); + r.register_host_function("HostEchoVecBytes", |v: Vec| Ok(v)) + .unwrap(); +} + +/// Function pointer type for fixture builders. Aliased to keep +/// the `FIXTURES` table type readable. +type FixtureBuilder = fn() -> Arc; + +/// Master list of fixtures regenerated by the regen test. +const FIXTURES: &[(&str, FixtureBuilder)] = &[ + (INIT_FIXTURE, build_init), + (CALL_FIXTURE, build_call), +]; + +// ============================================================================ +// Regeneration test (env-var-gated, not run in CI) +// ============================================================================ + +/// Regenerate every fixture for the locally available hypervisor. +/// +/// Gated behind `HYPERLIGHT_REGEN_GOLDENS`. Pass any non-empty +/// value to enable; existing fixtures are always overwritten +/// since regeneration is a deliberate action. +#[test] +fn golden_regen() { + match std::env::var("HYPERLIGHT_REGEN_GOLDENS") { + Ok(v) if !v.is_empty() => {} + _ => { + eprintln!( + "golden_regen: skipped (set HYPERLIGHT_REGEN_GOLDENS=1 to overwrite fixtures)", + ); + return; + } + } + + let hv = match LocalHypervisor::detect() { + Some(h) => h, + None => { + eprintln!("golden_regen: no hypervisor available, nothing to write"); + return; + } + }; + eprintln!("golden_regen: using hypervisor {}", hv.short_name()); + + let dir = fixtures_dir(); + std::fs::create_dir_all(&dir).expect("create fixtures dir"); + + let mut wrote = 0usize; + for (name, build) in FIXTURES { + let path = dir.join(format!("{}_{}.hls", name, hv.short_name())); + let snap = build(); + snap.to_file(&path).unwrap_or_else(|e| { + panic!( + "failed to write fixture {}: {}", + path.file_name().unwrap().to_string_lossy(), + e + ) + }); + eprintln!( + " wrote {} ({} bytes)", + path.file_name().unwrap().to_string_lossy(), + std::fs::metadata(&path).map(|m| m.len()).unwrap_or(0), + ); + wrote += 1; + } + eprintln!("golden_regen: {} written", wrote); +} + +// ============================================================================ +// Per-surface tests against `init` +// ============================================================================ + +/// Coverage: A (header layout via load), B (layout arithmetic with +/// non-default sizes), C (PEB contents), D (CallFunction port via +/// guest dispatch), E (initialise entry convention), N (BSS init). +#[test] +fn init_basic_call() { + let Some(mut sbox) = load_init() else { + return; + }; + let value: i32 = sbox.call("GetStatic", ()).unwrap(); + assert_eq!( + value, 0, + "fresh init must observe BSS == 0 after re-running guest init", + ); +} + +/// Coverage: K (init_data round-trip + permissions). The guest +/// `ReadFromUserMemory` returns `Err` if the captured init_data +/// doesn't match the expected bytes byte-for-byte, so this test +/// will surface any silent corruption of the init_data region. +#[test] +fn init_data_round_trip() { + let Some(mut sbox) = load_init() else { + return; + }; + let bytes: Vec = sbox + .call( + "ReadFromUserMemory", + (INIT_DATA.len() as u64, INIT_DATA.to_vec()), + ) + .unwrap(); + assert_eq!( + bytes, INIT_DATA, + "captured init_data must round-trip byte-for-byte", + ); +} + +/// Coverage: L (non-default-layout arithmetic on reload). Any +/// silent shift in `SandboxMemoryLayout::new` arithmetic with the +/// custom sizes in `build_init` would land the PEB +/// or scratch buffers at the wrong addresses; a normal +/// `Echo`-style call would then fail. +#[test] +fn init_custom_layout_works() { + let Some(mut sbox) = load_init() else { + return; + }; + let got: String = sbox.call("Echo", "custom-layout".to_string()).unwrap(); + assert_eq!(got, "custom-layout"); +} + +// ============================================================================ +// Per-surface tests against `call` +// ============================================================================ + +/// Coverage: F (dispatch convention), I (sregs apply), J (PT +/// relocation), M (stack contents), N (BSS captured). +#[test] +fn call_captured_bss() { + let Some(mut sbox) = load_call() else { + return; + }; + let value: i32 = sbox.call("GetStatic", ()).unwrap(); + assert_eq!(value, 42, "captured COUNTER must restore exactly"); +} + +/// Coverage: O (heap allocator state captured across save/load). +#[test] +fn call_captured_heap_pattern() { + let Some(mut sbox) = load_call() else { + return; + }; + let got: Vec = sbox.call("ReadPattern", ()).unwrap(); + let expected: Vec = (0..HEAP_PATTERN_LEN as usize) + .map(|i| (i & 0xff) as u8) + .collect(); + assert_eq!(got, expected, "captured heap pattern must round-trip"); +} + +/// Coverage: G (guest-call wire format for every primitive +/// parameter / return type). For each primitive, call the +/// matching `EchoT` and assert it round-trips. Float NaN is +/// asserted via `is_nan` since `NaN != NaN`. +#[test] +fn call_guest_types_round_trip() { + let Some(mut sbox) = load_call() else { + return; + }; + + for &v in &[i32::MIN, -1, 0, 1, i32::MAX] { + let got: i32 = sbox.call("EchoI32", v).unwrap(); + assert_eq!(got, v, "EchoI32({})", v); + } + for &v in &[0u32, 1, u32::MAX] { + let got: u32 = sbox.call("EchoU32", v).unwrap(); + assert_eq!(got, v, "EchoU32({})", v); + } + for &v in &[i64::MIN, -1, 0, 1, i64::MAX] { + let got: i64 = sbox.call("EchoI64", v).unwrap(); + assert_eq!(got, v, "EchoI64({})", v); + } + for &v in &[0u64, 1, u64::MAX] { + let got: u64 = sbox.call("EchoU64", v).unwrap(); + assert_eq!(got, v, "EchoU64({})", v); + } + for &v in &[ + 0.0f32, + -1.5, + 1.5, + f32::MIN, + f32::MAX, + f32::INFINITY, + f32::NEG_INFINITY, + ] { + let got: f32 = sbox.call("EchoFloat", v).unwrap(); + assert_eq!(got, v, "EchoFloat({})", v); + } + { + let got: f32 = sbox.call("EchoFloat", f32::NAN).unwrap(); + assert!(got.is_nan(), "EchoFloat(NaN) returned {}", got); + } + for &v in &[ + 0.0f64, + -1.5, + 1.5, + f64::MIN, + f64::MAX, + f64::INFINITY, + f64::NEG_INFINITY, + ] { + let got: f64 = sbox.call("EchoDouble", v).unwrap(); + assert_eq!(got, v, "EchoDouble({})", v); + } + { + let got: f64 = sbox.call("EchoDouble", f64::NAN).unwrap(); + assert!(got.is_nan(), "EchoDouble(NaN) returned {}", got); + } + for &v in &[false, true] { + let got: bool = sbox.call("EchoBool", v).unwrap(); + assert_eq!(got, v, "EchoBool({})", v); + } + for v in [String::new(), "hello".to_string(), "héllo 🌍".to_string()] { + let got: String = sbox.call("Echo", v.clone()).unwrap(); + assert_eq!(got, v, "Echo({:?})", v); + } + for v in [ + Vec::::new(), + vec![0u8, 1, 2, 3, 0xff], + (0..256u32).map(|i| (i & 0xff) as u8).collect::>(), + ] { + let got: Vec = sbox.call("GetSizePrefixedBuffer", v.clone()).unwrap(); + assert_eq!(got, v, "GetSizePrefixedBuffer(len={})", v.len()); + } + let _: () = sbox.call("NoOp", ()).unwrap(); + let mixed: i32 = sbox + .call( + "PrintElevenArgs", + ( + "a".to_string(), + 1i32, + 2i64, + "b".to_string(), + "c".to_string(), + true, + false, + 3u32, + 4u64, + 5i32, + 6.5f32, + ), + ) + .unwrap(); + assert!(mixed >= 0, "PrintElevenArgs returned {}", mixed); +} + +/// Coverage: H (host_function_details flatbuffer schema for every +/// primitive type), D (CallFunction port), G (return value path). +/// Each `RoundTripHostT` calls the matching host fn and returns +/// its value. +#[test] +fn call_host_round_trips() { + let Some(mut sbox) = load_call() else { + return; + }; + assert_eq!(sbox.call::("RoundTripHostI32", -7i32).unwrap(), -7); + assert_eq!( + sbox.call::("RoundTripHostU32", 0xdead_beefu32) + .unwrap(), + 0xdead_beef, + ); + assert_eq!( + sbox.call::("RoundTripHostI64", i64::MIN).unwrap(), + i64::MIN, + ); + assert_eq!( + sbox.call::("RoundTripHostU64", u64::MAX).unwrap(), + u64::MAX, + ); + assert_eq!( + sbox.call::("RoundTripHostF32", -1.25f32).unwrap(), + -1.25, + ); + assert_eq!( + sbox.call::("RoundTripHostF64", 1234.5f64).unwrap(), + 1234.5, + ); + assert!(!sbox.call::("RoundTripHostBool", false).unwrap()); + assert_eq!( + sbox.call::("RoundTripHostString", "round-trip".to_string()) + .unwrap(), + "round-trip", + ); + assert_eq!( + sbox.call::>("RoundTripHostVecBytes", vec![0u8, 1, 2, 3, 0xff]) + .unwrap(), + vec![0u8, 1, 2, 3, 0xff], + ); +} + +/// Coverage: P (snapshot-from-loaded-snapshot path). Loads the +/// Call fixture, mutates state, takes a fresh snapshot, writes it +/// to disk, loads it back, asserts. +#[test] +fn call_chained_snapshot() { + let Some(mut sbox) = load_call() else { + return; + }; + let val: i32 = sbox.call("AddToStatic", 5i32).unwrap(); + assert_eq!(val, 47); + let snap = sbox.snapshot().unwrap(); + + let dir = tempfile::tempdir().unwrap(); + let path = dir.path().join("chained.hls"); + snap.to_file(&path).unwrap(); + + let loaded = Snapshot::from_file(&path).unwrap(); + let mut funcs = HostFunctions::default(); + register_host_echo_fns(&mut funcs); + let mut sbox2 = MultiUseSandbox::from_snapshot(Arc::new(loaded), funcs, None).unwrap(); + let val: i32 = sbox2.call("GetStatic", ()).unwrap(); + assert_eq!(val, 47, "chained snapshot must observe captured COUNTER"); +} diff --git a/src/hyperlight_host/src/sandbox/snapshot/mod.rs b/src/hyperlight_host/src/sandbox/snapshot/mod.rs index 1bb183ea8..f99760f48 100644 --- a/src/hyperlight_host/src/sandbox/snapshot/mod.rs +++ b/src/hyperlight_host/src/sandbox/snapshot/mod.rs @@ -14,8 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ +mod abi_tripwires; mod file; mod file_tests; +mod golden_tests; use std::collections::{BTreeMap, HashMap}; use std::sync::atomic::{AtomicU64, Ordering}; diff --git a/src/hyperlight_host/tests/integration_test.rs b/src/hyperlight_host/tests/integration_test.rs index cc7b7587d..6c03bb123 100644 --- a/src/hyperlight_host/tests/integration_test.rs +++ b/src/hyperlight_host/tests/integration_test.rs @@ -535,7 +535,7 @@ fn guest_malloc_abort() { }); // allocate a vector (on heap) that is bigger than the heap - let heap_size = 0x4000; + let heap_size = 0x6000; let size_to_allocate = 0x10000; assert!( size_to_allocate > heap_size, @@ -616,7 +616,7 @@ fn corrupt_output_back_pointer_rejected() { #[test] fn guest_panic_no_alloc() { - let heap_size = 0x4000; + let heap_size = 0x6000; let mut cfg = SandboxConfiguration::default(); cfg.set_heap_size(heap_size); diff --git a/src/hyperlight_host/tests/snapshot_goldens/fixtures/README.md b/src/hyperlight_host/tests/snapshot_goldens/fixtures/README.md new file mode 100644 index 000000000..72ccaea75 --- /dev/null +++ b/src/hyperlight_host/tests/snapshot_goldens/fixtures/README.md @@ -0,0 +1,81 @@ +# Snapshot golden fixtures + +These are checked-in `.hls` snapshot files that exhaustively pin +the on-disk snapshot format. Two fixtures per (arch, hypervisor): + +* `init_{hv}.hls`: Initialise (preinit) snapshot + built with non-default layout sizes plus an init-data blob. +* `call_{hv}.hls`: Call (mid-execution) snapshot + built after the guest has bumped a static, allocated and pinned + a heap buffer with a known pattern, and round-tripped a value + through every primitive-typed host function. + +`{hv}` is one of `kvm`, `mshv`, `whp`. Tests that don't match the +local hypervisor skip silently. + +See `docs/snapshot-golden-tests-plan.md` for the full design and +A-P surface enumeration. + +## When to regenerate + +Anything that changes the on-disk byte layout or the captured +memory blob's interpretation requires a regen. Concretely: + +* Bumping `SNAPSHOT_ABI_VERSION` or `FormatVersion`. +* Changes to `SandboxMemoryLayout` arithmetic that move regions. +* Changes to `HyperlightPEB` layout. +* Changes to hypercall port numbers. +* Changes to the guest entry point or dispatch calling convention. +* Changes to `simpleguest` that affect the captured BSS / heap + state (very rare, since the tests assert on specific guest + outputs and would fail loudly). + +Tier 1 ABI tripwires in `abi_tripwires.rs` will catch most of +these at compile time and remind you to regen. + +## How to regenerate + +The canonical procedure uses CI, so you don't need a runner of +every (HV, CPU) cell yourself. + +1. Push the change that broke the format. The Tier 1 tripwires + in `abi_tripwires.rs` will fail to compile until you've bumped + `SNAPSHOT_ABI_VERSION` (or `FormatVersion`) and updated the + relevant assertion. Resolve those first. +2. Apply the `regen-goldens` label to the PR. +3. The `Regenerate Snapshot Goldens` workflow runs once per + `(hypervisor, cpu)` cell and uploads the produced `.hls` + files as artifacts named `goldens-{hv}-{cpu}`. If you re-add + the label the workflow runs again from scratch. +4. Download the artifacts from the workflow run page (or with + `gh run download`). +5. Drop the files into this directory, replacing existing fixtures. +6. Commit and push. The goldens that previously failed should now + pass. +7. Remove the `regen-goldens` label. + +### Local regen (debugging only) + +If you want to inspect what the regen would produce on your local +machine, you can run it directly: + +```sh +HYPERLIGHT_REGEN_GOLDENS=1 cargo test -p hyperlight-host \ + --lib sandbox::snapshot::golden_tests::golden_regen -- --nocapture +``` + +This always overwrites the fixtures for the locally available +hypervisor. + +**Do not commit fixtures generated this way.** Use the CI workflow +artifacts instead. Local regen exists for ad-hoc debugging. + +## PR conventions + +* Regen fixtures in a dedicated commit (or dedicated PR) separate + from the change that required the bump. Reviewers can then look + at the diff and confirm "this is just bytes that match the new + format" rather than mixing it with logic changes. +* Do not include unrelated `.hls` files in the same commit. +* Total fixture size is ~10 MB per HV today. Keep an eye on the + size if adding more fixtures. diff --git a/src/hyperlight_host/tests/snapshot_goldens/fixtures/call_kvm.hls b/src/hyperlight_host/tests/snapshot_goldens/fixtures/call_kvm.hls new file mode 100644 index 0000000000000000000000000000000000000000..c1aa97686cb4c34dacf78e9d9b98c9f62154b585 GIT binary patch literal 5349376 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

>c16AAnntj_n%T*2|(j9<$&ge)CN=t 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�b>{NWqPjj< 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 literal 0 HcmV?d00001 diff --git a/src/hyperlight_host/tests/snapshot_goldens/fixtures/init_kvm.hls b/src/hyperlight_host/tests/snapshot_goldens/fixtures/init_kvm.hls new file mode 100644 index 0000000000000000000000000000000000000000..fb88a7ccc1425630e4e168124091d83b1e9ff876 GIT binary patch literal 5431296 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

    NuiZVp(3@RSmgo|X?B2Ew8auw&v3blL*@+{t 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 zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FoIdKwS^rPajiC_ILI(-;L|vj+N2!A_)*6K!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ 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 -> Vec { data } +// --- Type-coverage echoes (used by snapshot golden tests F6) --- +// +// One guest function per primitive parameter/return type, so the +// guest-call wire format for each variant of `ParameterValue` / +// `ReturnValue` is exercised by a single round-trip call. +// +// Strings (`Echo`), `Vec` (`GetSizePrefixedBuffer`), `f32` +// (`EchoFloat`) and `f64` (`EchoDouble`) are already covered above. +// The `unit` return type is exercised by `NoOp` below. + +#[guest_function("EchoI32")] +fn echo_i32(v: i32) -> i32 { + v +} + +#[guest_function("EchoU32")] +fn echo_u32(v: u32) -> u32 { + v +} + +#[guest_function("EchoI64")] +fn echo_i64(v: i64) -> i64 { + v +} + +#[guest_function("EchoU64")] +fn echo_u64(v: u64) -> u64 { + v +} + +#[guest_function("EchoBool")] +fn echo_bool(v: bool) -> bool { + v +} + +#[guest_function("NoOp")] +fn no_op() {} + +// --- Host-fn round trips (used by snapshot golden tests F7) --- +// +// One host function per primitive type. The host registers each; +// the guest invokes each via a `RoundTripHostT` wrapper so the test +// can verify the value round-trips through the host. This exercises +// the persisted `HostFunctionDetails` flatbuffer schema for every +// primitive type (both as parameter and as return). + +#[host_function("HostEchoI32")] +fn host_echo_i32(v: i32) -> Result; + +#[host_function("HostEchoU32")] +fn host_echo_u32(v: u32) -> Result; + +#[host_function("HostEchoI64")] +fn host_echo_i64(v: i64) -> Result; + +#[host_function("HostEchoU64")] +fn host_echo_u64(v: u64) -> Result; + +#[host_function("HostEchoF32")] +fn host_echo_f32(v: f32) -> Result; + +#[host_function("HostEchoF64")] +fn host_echo_f64(v: f64) -> Result; + +#[host_function("HostEchoBool")] +fn host_echo_bool(v: bool) -> Result; + +#[host_function("HostEchoString")] +fn host_echo_string(v: String) -> Result; + +#[host_function("HostEchoVecBytes")] +fn host_echo_vec_bytes(v: Vec) -> Result>; + +#[guest_function("RoundTripHostI32")] +fn round_trip_host_i32(v: i32) -> Result { + host_echo_i32(v) +} + +#[guest_function("RoundTripHostU32")] +fn round_trip_host_u32(v: u32) -> Result { + host_echo_u32(v) +} + +#[guest_function("RoundTripHostI64")] +fn round_trip_host_i64(v: i64) -> Result { + host_echo_i64(v) +} + +#[guest_function("RoundTripHostU64")] +fn round_trip_host_u64(v: u64) -> Result { + host_echo_u64(v) +} + +#[guest_function("RoundTripHostF32")] +fn round_trip_host_f32(v: f32) -> Result { + host_echo_f32(v) +} + +#[guest_function("RoundTripHostF64")] +fn round_trip_host_f64(v: f64) -> Result { + host_echo_f64(v) +} + +#[guest_function("RoundTripHostBool")] +fn round_trip_host_bool(v: bool) -> Result { + host_echo_bool(v) +} + +#[guest_function("RoundTripHostString")] +fn round_trip_host_string(v: String) -> Result { + host_echo_string(v) +} + +#[guest_function("RoundTripHostVecBytes")] +fn round_trip_host_vec_bytes(v: Vec) -> Result> { + host_echo_vec_bytes(v) +} + +// --- Heap pattern (used by snapshot golden test F5) --- +// +// `AllocAndWritePattern(len)` allocates a `Vec` of length `len`, +// writes a deterministic byte pattern into it, and pins it in a +// static so the heap allocation survives the snapshot. +// `ReadPattern()` returns whatever is currently pinned. The test +// snapshots between the two calls and asserts the bytes round-trip +// across the on-disk save/load. + +static mut HEAP_PATTERN: Option> = None; + +#[guest_function("AllocAndWritePattern")] +fn alloc_and_write_pattern(len: u64) { + let v: Vec = (0..len as usize).map(|i| (i & 0xff) as u8).collect(); + unsafe { HEAP_PATTERN = Some(v) }; +} + +#[guest_function("ReadPattern")] +fn read_pattern() -> Vec { + #[allow(static_mut_refs)] + unsafe { + HEAP_PATTERN.clone().unwrap_or_default() + } +} + #[expect( clippy::empty_loop, reason = "This function is used to keep the CPU busy"

    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