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
19 changes: 12 additions & 7 deletions src/hyperlight_host/src/hypervisor/gdb/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,9 @@ use thiserror::Error;
use x86_64_target::HyperlightSandboxTarget;

use super::InterruptHandle;
use crate::hypervisor::handlers::DbgMemAccessHandlerCaller;
use crate::mem::layout::SandboxMemoryLayout;
use crate::mem::shared_mem::HostSharedMemory;
use crate::sandbox::mem_mgr::MemMgrWrapper;
use crate::{HyperlightError, new_error};

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

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

data = &mut data[read_len..];
gva += read_len as u64;
Expand All @@ -282,7 +285,7 @@ pub(super) trait GuestDebug {
&mut self,
vcpu_fd: &Self::Vcpu,
addr: u64,
dbg_mem_access_fn: Arc<Mutex<dyn DbgMemAccessHandlerCaller>>,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
) -> crate::Result<()> {
let addr = self.translate_gva(vcpu_fd, addr)?;

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

data = &data[write_len..];
gva += write_len as u64;
Expand Down
39 changes: 0 additions & 39 deletions src/hyperlight_host/src/hypervisor/handlers.rs

This file was deleted.

24 changes: 9 additions & 15 deletions src/hyperlight_host/src/hypervisor/hyperv_linux.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,6 @@ use super::fpu::{FP_CONTROL_WORD_DEFAULT, FP_TAG_WORD_DEFAULT, MXCSR_DEFAULT};
use super::gdb::{
DebugCommChannel, DebugMsg, DebugResponse, GuestDebug, MshvDebug, VcpuStopReason,
};
#[cfg(gdb)]
use super::handlers::DbgMemAccessHandlerWrapper;
#[cfg(feature = "init-paging")]
use super::{
CR0_AM, CR0_ET, CR0_MP, CR0_NE, CR0_PE, CR0_PG, CR0_WP, CR4_OSFXSR, CR4_OSXMMEXCPT, CR4_PAE,
Expand Down Expand Up @@ -96,7 +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::hypervisor::handlers::DbgMemAccessHandlerCaller;
use crate::mem::shared_mem::HostSharedMemory;
use crate::sandbox::mem_mgr::MemMgrWrapper;
use crate::{Result, new_error};

impl HypervLinuxDriver {
Expand Down Expand Up @@ -127,7 +126,7 @@ mod debug {
pub(crate) fn process_dbg_request(
&mut self,
req: DebugMsg,
dbg_mem_access_fn: Arc<Mutex<dyn DbgMemAccessHandlerCaller>>,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
) -> Result<DebugResponse> {
if let Some(debug) = self.debug.as_mut() {
match req {
Expand Down Expand Up @@ -175,12 +174,9 @@ mod debug {
.map_err(|e| {
new_error!("Error locking at {}:{}: {}", file!(), line!(), e)
})?
.get_code_offset()
.map_err(|e| {
log::error!("Failed to get code offset: {:?}", e);

e
})?;
.unwrap_mgr()
.layout
.get_guest_code_address();

Ok(DebugResponse::GetCodeSectionOffset(offset as u64))
}
Expand Down Expand Up @@ -591,7 +587,7 @@ impl Hypervisor for HypervLinuxDriver {
mem_mgr: MemMgrWrapper<HostSharedMemory>,
host_funcs: Arc<Mutex<FunctionRegistry>>,
max_guest_log_level: Option<LevelFilter>,
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
) -> Result<()> {
self.mem_mgr = Some(mem_mgr);
self.host_funcs = Some(host_funcs);
Expand Down Expand Up @@ -663,7 +659,7 @@ impl Hypervisor for HypervLinuxDriver {
fn dispatch_call_from_host(
&mut self,
dispatch_func_addr: RawPtr,
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
) -> Result<()> {
// Reset general purpose registers, then set RIP and RSP
let regs = StandardRegisters {
Expand Down Expand Up @@ -1025,9 +1021,7 @@ impl Hypervisor for HypervLinuxDriver {
#[cfg(gdb)]
fn handle_debug(
&mut self,
dbg_mem_access_fn: std::sync::Arc<
std::sync::Mutex<dyn super::handlers::DbgMemAccessHandlerCaller>,
>,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
stop_reason: VcpuStopReason,
) -> Result<()> {
if self.debug.is_none() {
Expand Down
22 changes: 9 additions & 13 deletions src/hyperlight_host/src/hypervisor/hyperv_windows.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,7 @@ use {
super::gdb::{
DebugCommChannel, DebugMsg, DebugResponse, GuestDebug, HypervDebug, VcpuStopReason,
},
super::handlers::DbgMemAccessHandlerWrapper,
crate::HyperlightError,
crate::hypervisor::handlers::DbgMemAccessHandlerCaller,
};

#[cfg(feature = "trace_guest")]
Expand Down Expand Up @@ -80,7 +78,8 @@ mod debug {
use super::{HypervWindowsDriver, *};
use crate::Result;
use crate::hypervisor::gdb::{DebugMsg, DebugResponse, VcpuStopReason, X86_64Regs};
use crate::hypervisor::handlers::DbgMemAccessHandlerCaller;
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 @@ -110,7 +109,7 @@ mod debug {
pub(crate) fn process_dbg_request(
&mut self,
req: DebugMsg,
dbg_mem_access_fn: Arc<Mutex<dyn DbgMemAccessHandlerCaller>>,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
) -> Result<DebugResponse> {
if let Some(debug) = self.debug.as_mut() {
match req {
Expand Down Expand Up @@ -158,12 +157,9 @@ mod debug {
.map_err(|e| {
new_error!("Error locking at {}:{}: {}", file!(), line!(), e)
})?
.get_code_offset()
.map_err(|e| {
log::error!("Failed to get code offset: {:?}", e);

e
})?;
.unwrap_mgr()
.layout
.get_guest_code_address();

Ok(DebugResponse::GetCodeSectionOffset(offset as u64))
}
Expand Down Expand Up @@ -606,7 +602,7 @@ impl Hypervisor for HypervWindowsDriver {
mem_mgr: MemMgrWrapper<HostSharedMemory>,
host_funcs: Arc<Mutex<FunctionRegistry>>,
max_guest_log_level: Option<LevelFilter>,
#[cfg(gdb)] dbg_mem_access_hdl: DbgMemAccessHandlerWrapper,
#[cfg(gdb)] dbg_mem_access_hdl: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
) -> Result<()> {
self.mem_mgr = Some(mem_mgr);
self.host_funcs = Some(host_funcs);
Expand Down Expand Up @@ -656,7 +652,7 @@ impl Hypervisor for HypervWindowsDriver {
fn dispatch_call_from_host(
&mut self,
dispatch_func_addr: RawPtr,
#[cfg(gdb)] dbg_mem_access_hdl: DbgMemAccessHandlerWrapper,
#[cfg(gdb)] dbg_mem_access_hdl: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
) -> Result<()> {
// Reset general purpose registers, then set RIP and RSP
let regs = WHvGeneralRegisters {
Expand Down Expand Up @@ -959,7 +955,7 @@ impl Hypervisor for HypervWindowsDriver {
#[cfg(gdb)]
fn handle_debug(
&mut self,
dbg_mem_access_fn: Arc<Mutex<dyn DbgMemAccessHandlerCaller>>,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
stop_reason: super::gdb::VcpuStopReason,
) -> Result<()> {
if self.debug.is_none() {
Expand Down
22 changes: 9 additions & 13 deletions src/hyperlight_host/src/hypervisor/kvm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@ use super::TraceRegister;
use super::fpu::{FP_CONTROL_WORD_DEFAULT, FP_TAG_WORD_DEFAULT, MXCSR_DEFAULT};
#[cfg(gdb)]
use super::gdb::{DebugCommChannel, DebugMsg, DebugResponse, GuestDebug, KvmDebug, VcpuStopReason};
#[cfg(gdb)]
use super::handlers::DbgMemAccessHandlerWrapper;
#[cfg(feature = "init-paging")]
use super::{
CR0_AM, CR0_ET, CR0_MP, CR0_NE, CR0_PE, CR0_PG, CR0_WP, CR4_OSFXSR, CR4_OSXMMEXCPT, CR4_PAE,
Expand Down Expand Up @@ -88,7 +86,8 @@ mod debug {
use crate::hypervisor::gdb::{
DebugMsg, DebugResponse, GuestDebug, KvmDebug, VcpuStopReason, X86_64Regs,
};
use crate::hypervisor::handlers::DbgMemAccessHandlerCaller;
use crate::mem::shared_mem::HostSharedMemory;
use crate::sandbox::mem_mgr::MemMgrWrapper;
use crate::{Result, new_error};

impl KVMDriver {
Expand Down Expand Up @@ -119,7 +118,7 @@ mod debug {
pub(crate) fn process_dbg_request(
&mut self,
req: DebugMsg,
dbg_mem_access_fn: Arc<Mutex<dyn DbgMemAccessHandlerCaller>>,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
) -> Result<DebugResponse> {
if let Some(debug) = self.debug.as_mut() {
match req {
Expand Down Expand Up @@ -167,12 +166,9 @@ mod debug {
.map_err(|e| {
new_error!("Error locking at {}:{}: {}", file!(), line!(), e)
})?
.get_code_offset()
.map_err(|e| {
log::error!("Failed to get code offset: {:?}", e);

e
})?;
.unwrap_mgr()
.layout
.get_guest_code_address();

Ok(DebugResponse::GetCodeSectionOffset(offset as u64))
}
Expand Down Expand Up @@ -479,7 +475,7 @@ impl Hypervisor for KVMDriver {
mem_mgr: MemMgrWrapper<HostSharedMemory>,
host_funcs: Arc<Mutex<FunctionRegistry>>,
max_guest_log_level: Option<LevelFilter>,
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
) -> Result<()> {
self.mem_mgr = Some(mem_mgr);
self.host_funcs = Some(host_funcs);
Expand Down Expand Up @@ -574,7 +570,7 @@ impl Hypervisor for KVMDriver {
fn dispatch_call_from_host(
&mut self,
dispatch_func_addr: RawPtr,
#[cfg(gdb)] dbg_mem_access_fn: DbgMemAccessHandlerWrapper,
#[cfg(gdb)] dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
) -> Result<()> {
// Reset general purpose registers, then set RIP and RSP
let regs = kvm_regs {
Expand Down Expand Up @@ -902,7 +898,7 @@ impl Hypervisor for KVMDriver {
#[cfg(gdb)]
fn handle_debug(
&mut self,
dbg_mem_access_fn: Arc<Mutex<dyn super::handlers::DbgMemAccessHandlerCaller>>,
dbg_mem_access_fn: Arc<Mutex<MemMgrWrapper<HostSharedMemory>>>,
stop_reason: VcpuStopReason,
) -> Result<()> {
if self.debug.is_none() {
Expand Down
Loading
Loading