Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions src/hyperlight_host/src/func/guest_err.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,17 @@ limitations under the License.
use hyperlight_common::flatbuffer_wrappers::guest_error::ErrorCode;

use crate::error::HyperlightError::{GuestError, StackOverflow};
use crate::mem::mgr::SandboxMemoryManager;
use crate::mem::shared_mem::HostSharedMemory;
use crate::metrics::{METRIC_GUEST_ERROR, METRIC_GUEST_ERROR_LABEL_CODE};
use crate::sandbox::mem_mgr::MemMgrWrapper;
use crate::{Result, log_then_return};

/// Check for a guest error and return an `Err` if one was found,
/// and `Ok` if one was not found.
pub(crate) fn check_for_guest_error(mgr: &mut MemMgrWrapper<HostSharedMemory>) -> Result<()> {
let guest_err = mgr.as_mut().get_guest_error().ok();
pub(crate) fn check_for_guest_error(
mgr: &mut SandboxMemoryManager<HostSharedMemory>,
) -> Result<()> {
let guest_err = mgr.get_guest_error().ok();
let Some(guest_err) = guest_err else {
return Ok(());
};
Expand Down
6 changes: 3 additions & 3 deletions src/hyperlight_host/src/func/host_functions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ impl Registerable for UninitializedSandbox {
return_type: Output::TYPE,
};

(*hfs).register_host_function(name.to_string(), entry, self.mgr.unwrap_mgr_mut())
(*hfs).register_host_function(name.to_string(), entry, &mut self.mgr)
}
#[cfg(all(feature = "seccomp", target_os = "linux"))]
fn register_host_function_with_syscalls<Args: ParameterTuple, Output: SupportedReturnType>(
Expand All @@ -82,7 +82,7 @@ impl Registerable for UninitializedSandbox {
return_type: Output::TYPE,
};

(*hfs).register_host_function(name.to_string(), entry, self.mgr.unwrap_mgr_mut())
(*hfs).register_host_function(name.to_string(), entry, &mut self.mgr)
}
}

Expand Down Expand Up @@ -210,7 +210,7 @@ pub(crate) fn register_host_function<Args: ParameterTuple, Output: SupportedRetu
.host_funcs
.try_lock()
.map_err(|e| new_error!("Error locking at {}:{}: {}", file!(), line!(), e))?
.register_host_function(name.to_string(), entry, sandbox.mgr.unwrap_mgr_mut())?;
.register_host_function(name.to_string(), entry, &mut sandbox.mgr)?;

Ok(())
}
12 changes: 5 additions & 7 deletions src/hyperlight_host/src/hypervisor/gdb/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ use x86_64_target::HyperlightSandboxTarget;

use super::InterruptHandle;
use crate::mem::layout::SandboxMemoryLayout;
use crate::mem::mgr::SandboxMemoryManager;
use crate::mem::shared_mem::HostSharedMemory;
use crate::sandbox::mem_mgr::MemMgrWrapper;
use crate::{HyperlightError, new_error};

#[derive(Debug, Error)]
Expand Down Expand Up @@ -210,7 +210,7 @@ pub(super) trait GuestDebug {
&mut self,
vcpu_fd: &Self::Vcpu,
addr: u64,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
) -> crate::Result<()> {
let addr = self.translate_gva(vcpu_fd, addr)?;

Expand All @@ -235,7 +235,7 @@ pub(super) trait GuestDebug {
vcpu_fd: &Self::Vcpu,
mut gva: u64,
mut data: &mut [u8],
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
) -> crate::Result<()> {
let data_len = data.len();
log::debug!("Read addr: {:X} len: {:X}", gva, data_len);
Expand All @@ -259,7 +259,6 @@ pub(super) trait GuestDebug {
dbg_mem_access_fn
.try_lock()
.map_err(|e| new_error!("Error locking at {}:{}: {}", file!(), line!(), e))?
.unwrap_mgr_mut()
.get_shared_mem_mut()
.copy_to_slice(&mut data[..read_len], offset)?;

Expand All @@ -285,7 +284,7 @@ pub(super) trait GuestDebug {
&mut self,
vcpu_fd: &Self::Vcpu,
addr: u64,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
) -> crate::Result<()> {
let addr = self.translate_gva(vcpu_fd, addr)?;

Expand All @@ -309,7 +308,7 @@ pub(super) trait GuestDebug {
vcpu_fd: &Self::Vcpu,
mut gva: u64,
mut data: &[u8],
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
) -> crate::Result<()> {
let data_len = data.len();
log::debug!("Write addr: {:X} len: {:X}", gva, data_len);
Expand All @@ -333,7 +332,6 @@ pub(super) trait GuestDebug {
dbg_mem_access_fn
.try_lock()
.map_err(|e| new_error!("Error locking at {}:{}: {}", file!(), line!(), e))?
.unwrap_mgr_mut()
.get_shared_mem_mut()
.copy_from_slice(&data[..write_len], offset)?;

Expand Down
19 changes: 9 additions & 10 deletions src/hyperlight_host/src/hypervisor/hyperv_linux.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,13 @@ use super::{HyperlightExit, Hypervisor, InterruptHandle, LinuxInterruptHandle, V
use crate::HyperlightError;
use crate::hypervisor::get_memory_access_violation;
use crate::mem::memory_region::{MemoryRegion, MemoryRegionFlags};
use crate::mem::mgr::SandboxMemoryManager;
use crate::mem::ptr::{GuestPtr, RawPtr};
use crate::mem::shared_mem::HostSharedMemory;
use crate::sandbox::SandboxConfiguration;
#[cfg(feature = "trace_guest")]
use crate::sandbox::TraceInfo;
use crate::sandbox::host_funcs::FunctionRegistry;
use crate::sandbox::mem_mgr::MemMgrWrapper;
use crate::sandbox::outb::handle_outb;
#[cfg(crashdump)]
use crate::sandbox::uninitialized::SandboxRuntimeConfig;
Expand All @@ -94,8 +94,8 @@ mod debug {
use super::mshv_bindings::hv_x64_exception_intercept_message;
use super::{HypervLinuxDriver, *};
use crate::hypervisor::gdb::{DebugMsg, DebugResponse, VcpuStopReason, X86_64Regs};
use crate::mem::mgr::SandboxMemoryManager;
use crate::mem::shared_mem::HostSharedMemory;
use crate::sandbox::mem_mgr::MemMgrWrapper;
use crate::{Result, new_error};

impl HypervLinuxDriver {
Expand Down Expand Up @@ -126,7 +126,7 @@ mod debug {
pub(crate) fn process_dbg_request(
&mut self,
req: DebugMsg,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
) -> Result<DebugResponse> {
if let Some(debug) = self.debug.as_mut() {
match req {
Expand Down Expand Up @@ -174,7 +174,6 @@ mod debug {
.map_err(|e| {
new_error!("Error locking at {}:{}: {}", file!(), line!(), e)
})?
.unwrap_mgr()
.layout
.get_guest_code_address();

Expand Down Expand Up @@ -312,7 +311,7 @@ pub(crate) struct HypervLinuxDriver {
orig_rsp: GuestPtr,
entrypoint: u64,
interrupt_handle: Arc<LinuxInterruptHandle>,
mem_mgr: Option<MemMgrWrapper<HostSharedMemory>>,
mem_mgr: Option<SandboxMemoryManager<HostSharedMemory>>,
host_funcs: Option<Arc<Mutex<FunctionRegistry>>>,

sandbox_regions: Vec<MemoryRegion>, // Initially mapped regions when sandbox is created
Expand Down Expand Up @@ -584,10 +583,10 @@ impl Hypervisor for HypervLinuxDriver {
peb_addr: RawPtr,
seed: u64,
page_size: u32,
mem_mgr: MemMgrWrapper<HostSharedMemory>,
mem_mgr: SandboxMemoryManager<HostSharedMemory>,
host_funcs: Arc<Mutex<FunctionRegistry>>,
max_guest_log_level: Option<LevelFilter>,
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
) -> Result<()> {
self.mem_mgr = Some(mem_mgr);
self.host_funcs = Some(host_funcs);
Expand Down Expand Up @@ -659,7 +658,7 @@ impl Hypervisor for HypervLinuxDriver {
fn dispatch_call_from_host(
&mut self,
dispatch_func_addr: RawPtr,
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
) -> Result<()> {
// Reset general purpose registers, then set RIP and RSP
let regs = StandardRegisters {
Expand Down Expand Up @@ -705,7 +704,7 @@ impl Hypervisor for HypervLinuxDriver {
#[cfg(feature = "trace_guest")]
{
// We need to handle the borrow checker issue where we need both:
// - &mut MemMgrWrapper (from self.mem_mgr.as_mut())
// - &mut SandboxMemoryManager (from self.mem_mgr)
// - &mut dyn Hypervisor (from self)
// We'll use a temporary approach to extract the mem_mgr temporarily
let mem_mgr_option = self.mem_mgr.take();
Expand Down Expand Up @@ -1021,7 +1020,7 @@ impl Hypervisor for HypervLinuxDriver {
#[cfg(gdb)]
fn handle_debug(
&mut self,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
stop_reason: VcpuStopReason,
) -> Result<()> {
if self.debug.is_none() {
Expand Down
19 changes: 9 additions & 10 deletions src/hyperlight_host/src/hypervisor/hyperv_windows.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,12 @@ use crate::hypervisor::fpu::FP_CONTROL_WORD_DEFAULT;
use crate::hypervisor::get_memory_access_violation;
use crate::hypervisor::wrappers::WHvGeneralRegisters;
use crate::mem::memory_region::{MemoryRegion, MemoryRegionFlags};
use crate::mem::mgr::SandboxMemoryManager;
use crate::mem::ptr::{GuestPtr, RawPtr};
use crate::mem::shared_mem::HostSharedMemory;
#[cfg(feature = "trace_guest")]
use crate::sandbox::TraceInfo;
use crate::sandbox::host_funcs::FunctionRegistry;
use crate::sandbox::mem_mgr::MemMgrWrapper;
use crate::sandbox::outb::handle_outb;
#[cfg(crashdump)]
use crate::sandbox::uninitialized::SandboxRuntimeConfig;
Expand All @@ -78,8 +78,8 @@ mod debug {
use super::{HypervWindowsDriver, *};
use crate::Result;
use crate::hypervisor::gdb::{DebugMsg, DebugResponse, VcpuStopReason, X86_64Regs};
use crate::mem::mgr::SandboxMemoryManager;
use crate::mem::shared_mem::HostSharedMemory;
use crate::sandbox::mem_mgr::MemMgrWrapper;

impl HypervWindowsDriver {
/// Resets the debug information to disable debugging
Expand Down Expand Up @@ -109,7 +109,7 @@ mod debug {
pub(crate) fn process_dbg_request(
&mut self,
req: DebugMsg,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
) -> Result<DebugResponse> {
if let Some(debug) = self.debug.as_mut() {
match req {
Expand Down Expand Up @@ -157,7 +157,6 @@ mod debug {
.map_err(|e| {
new_error!("Error locking at {}:{}: {}", file!(), line!(), e)
})?
.unwrap_mgr()
.layout
.get_guest_code_address();

Expand Down Expand Up @@ -279,7 +278,7 @@ pub(crate) struct HypervWindowsDriver {
entrypoint: u64,
orig_rsp: GuestPtr,
interrupt_handle: Arc<WindowsInterruptHandle>,
mem_mgr: Option<MemMgrWrapper<HostSharedMemory>>,
mem_mgr: Option<SandboxMemoryManager<HostSharedMemory>>,
host_funcs: Option<Arc<Mutex<FunctionRegistry>>>,

sandbox_regions: Vec<MemoryRegion>, // Initially mapped regions when sandbox is created
Expand Down Expand Up @@ -599,10 +598,10 @@ impl Hypervisor for HypervWindowsDriver {
peb_address: RawPtr,
seed: u64,
page_size: u32,
mem_mgr: MemMgrWrapper<HostSharedMemory>,
mem_mgr: SandboxMemoryManager<HostSharedMemory>,
host_funcs: Arc<Mutex<FunctionRegistry>>,
max_guest_log_level: Option<LevelFilter>,
#[cfg(gdb)] dbg_mem_access_hdl: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
#[cfg(gdb)] dbg_mem_access_hdl: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
) -> Result<()> {
self.mem_mgr = Some(mem_mgr);
self.host_funcs = Some(host_funcs);
Expand Down Expand Up @@ -652,7 +651,7 @@ impl Hypervisor for HypervWindowsDriver {
fn dispatch_call_from_host(
&mut self,
dispatch_func_addr: RawPtr,
#[cfg(gdb)] dbg_mem_access_hdl: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
#[cfg(gdb)] dbg_mem_access_hdl: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
) -> Result<()> {
// Reset general purpose registers, then set RIP and RSP
let regs = WHvGeneralRegisters {
Expand Down Expand Up @@ -696,7 +695,7 @@ impl Hypervisor for HypervWindowsDriver {
#[cfg(feature = "trace_guest")]
{
// We need to handle the borrow checker issue where we need both:
// - &mut MemMgrWrapper (from self.mem_mgr.as_mut())
// - &mut SandboxMemoryManager (from self.mem_mgr.as_mut())
// - &mut dyn Hypervisor (from self)
// We'll use a temporary approach to extract the mem_mgr temporarily
let mem_mgr_option = self.mem_mgr.take();
Expand Down Expand Up @@ -955,7 +954,7 @@ impl Hypervisor for HypervWindowsDriver {
#[cfg(gdb)]
fn handle_debug(
&mut self,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
stop_reason: super::gdb::VcpuStopReason,
) -> Result<()> {
if self.debug.is_none() {
Expand Down
19 changes: 9 additions & 10 deletions src/hyperlight_host/src/hypervisor/kvm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,13 @@ use super::{HyperlightExit, Hypervisor, InterruptHandle, LinuxInterruptHandle, V
use crate::HyperlightError;
use crate::hypervisor::get_memory_access_violation;
use crate::mem::memory_region::{MemoryRegion, MemoryRegionFlags};
use crate::mem::mgr::SandboxMemoryManager;
use crate::mem::ptr::{GuestPtr, RawPtr};
use crate::mem::shared_mem::HostSharedMemory;
use crate::sandbox::SandboxConfiguration;
#[cfg(feature = "trace_guest")]
use crate::sandbox::TraceInfo;
use crate::sandbox::host_funcs::FunctionRegistry;
use crate::sandbox::mem_mgr::MemMgrWrapper;
use crate::sandbox::outb::handle_outb;
#[cfg(crashdump)]
use crate::sandbox::uninitialized::SandboxRuntimeConfig;
Expand Down Expand Up @@ -86,8 +86,8 @@ mod debug {
use crate::hypervisor::gdb::{
DebugMsg, DebugResponse, GuestDebug, KvmDebug, VcpuStopReason, X86_64Regs,
};
use crate::mem::mgr::SandboxMemoryManager;
use crate::mem::shared_mem::HostSharedMemory;
use crate::sandbox::mem_mgr::MemMgrWrapper;
use crate::{Result, new_error};

impl KVMDriver {
Expand Down Expand Up @@ -118,7 +118,7 @@ mod debug {
pub(crate) fn process_dbg_request(
&mut self,
req: DebugMsg,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
) -> Result<DebugResponse> {
if let Some(debug) = self.debug.as_mut() {
match req {
Expand Down Expand Up @@ -166,7 +166,6 @@ mod debug {
.map_err(|e| {
new_error!("Error locking at {}:{}: {}", file!(), line!(), e)
})?
.unwrap_mgr()
.layout
.get_guest_code_address();

Expand Down Expand Up @@ -292,7 +291,7 @@ pub(crate) struct KVMDriver {
entrypoint: u64,
orig_rsp: GuestPtr,
interrupt_handle: Arc<LinuxInterruptHandle>,
mem_mgr: Option<MemMgrWrapper<HostSharedMemory>>,
mem_mgr: Option<SandboxMemoryManager<HostSharedMemory>>,
host_funcs: Option<Arc<Mutex<FunctionRegistry>>>,

sandbox_regions: Vec<MemoryRegion>, // Initially mapped regions when sandbox is created
Expand Down Expand Up @@ -472,10 +471,10 @@ impl Hypervisor for KVMDriver {
peb_addr: RawPtr,
seed: u64,
page_size: u32,
mem_mgr: MemMgrWrapper<HostSharedMemory>,
mem_mgr: SandboxMemoryManager<HostSharedMemory>,
host_funcs: Arc<Mutex<FunctionRegistry>>,
max_guest_log_level: Option<LevelFilter>,
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
) -> Result<()> {
self.mem_mgr = Some(mem_mgr);
self.host_funcs = Some(host_funcs);
Expand Down Expand Up @@ -570,7 +569,7 @@ impl Hypervisor for KVMDriver {
fn dispatch_call_from_host(
&mut self,
dispatch_func_addr: RawPtr,
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
) -> Result<()> {
// Reset general purpose registers, then set RIP and RSP
let regs = kvm_regs {
Expand Down Expand Up @@ -623,7 +622,7 @@ impl Hypervisor for KVMDriver {
#[cfg(feature = "trace_guest")]
{
// We need to handle the borrow checker issue where we need both:
// - &mut MemMgrWrapper (from self.mem_mgr.as_mut())
// - &mut SandboxMemoryManager (from self.mem_mgr.as_mut())
// - &mut dyn Hypervisor (from self)
// We'll use a temporary approach to extract the mem_mgr temporarily
let mem_mgr_option = self.mem_mgr.take();
Expand Down Expand Up @@ -898,7 +897,7 @@ impl Hypervisor for KVMDriver {
#[cfg(gdb)]
fn handle_debug(
&mut self,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
dbg_mem_access_fn: Arc<Mutex<SandboxMemoryManager<HostSharedMemory>>>,
stop_reason: VcpuStopReason,
) -> Result<()> {
if self.debug.is_none() {
Expand Down
Loading
Loading