mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
hypervisor: mshv: Add new memory region flag
GPA_MAP_ADJUSTABLE suggests hypervisor to adjust GPA permissions as required. Signed-off-by: Jinank Jain <jinankjain@microsoft.com>
This commit is contained in:
committed by
Rob Bradford
parent
035c4b20fb
commit
321d6f47e6
@@ -134,6 +134,7 @@ pub const USER_MEMORY_REGION_READ: u32 = 1;
|
|||||||
pub const USER_MEMORY_REGION_WRITE: u32 = 1 << 1;
|
pub const USER_MEMORY_REGION_WRITE: u32 = 1 << 1;
|
||||||
pub const USER_MEMORY_REGION_EXECUTE: u32 = 1 << 2;
|
pub const USER_MEMORY_REGION_EXECUTE: u32 = 1 << 2;
|
||||||
pub const USER_MEMORY_REGION_LOG_DIRTY: u32 = 1 << 3;
|
pub const USER_MEMORY_REGION_LOG_DIRTY: u32 = 1 << 3;
|
||||||
|
pub const USER_MEMORY_REGION_ADJUSTABLE: u32 = 1 << 4;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum MpState {
|
pub enum MpState {
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ use snp_constants::*;
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
ClockData, CpuState, IoEventAddress, IrqRoutingEntry, MpState, UserMemoryRegion,
|
ClockData, CpuState, IoEventAddress, IrqRoutingEntry, MpState, UserMemoryRegion,
|
||||||
USER_MEMORY_REGION_EXECUTE, USER_MEMORY_REGION_READ, USER_MEMORY_REGION_WRITE,
|
USER_MEMORY_REGION_ADJUSTABLE, USER_MEMORY_REGION_EXECUTE, USER_MEMORY_REGION_READ,
|
||||||
|
USER_MEMORY_REGION_WRITE,
|
||||||
};
|
};
|
||||||
#[cfg(feature = "sev_snp")]
|
#[cfg(feature = "sev_snp")]
|
||||||
use igvm_defs::IGVM_VHS_SNP_ID_BLOCK;
|
use igvm_defs::IGVM_VHS_SNP_ID_BLOCK;
|
||||||
@@ -73,6 +74,9 @@ impl From<mshv_user_mem_region> for UserMemoryRegion {
|
|||||||
if region.flags & HV_MAP_GPA_EXECUTABLE != 0 {
|
if region.flags & HV_MAP_GPA_EXECUTABLE != 0 {
|
||||||
flags |= USER_MEMORY_REGION_EXECUTE;
|
flags |= USER_MEMORY_REGION_EXECUTE;
|
||||||
}
|
}
|
||||||
|
if region.flags & HV_MAP_GPA_ADJUSTABLE != 0 {
|
||||||
|
flags |= USER_MEMORY_REGION_ADJUSTABLE;
|
||||||
|
}
|
||||||
|
|
||||||
UserMemoryRegion {
|
UserMemoryRegion {
|
||||||
guest_phys_addr: (region.guest_pfn << PAGE_SHIFT as u64)
|
guest_phys_addr: (region.guest_pfn << PAGE_SHIFT as u64)
|
||||||
@@ -97,6 +101,9 @@ impl From<UserMemoryRegion> for mshv_user_mem_region {
|
|||||||
if region.flags & USER_MEMORY_REGION_EXECUTE != 0 {
|
if region.flags & USER_MEMORY_REGION_EXECUTE != 0 {
|
||||||
flags |= HV_MAP_GPA_EXECUTABLE;
|
flags |= HV_MAP_GPA_EXECUTABLE;
|
||||||
}
|
}
|
||||||
|
if region.flags & USER_MEMORY_REGION_ADJUSTABLE != 0 {
|
||||||
|
flags |= HV_MAP_GPA_ADJUSTABLE;
|
||||||
|
}
|
||||||
|
|
||||||
mshv_user_mem_region {
|
mshv_user_mem_region {
|
||||||
guest_pfn: region.guest_phys_addr >> PAGE_SHIFT,
|
guest_pfn: region.guest_phys_addr >> PAGE_SHIFT,
|
||||||
@@ -1658,7 +1665,7 @@ impl vm::Vm for MshvVm {
|
|||||||
readonly: bool,
|
readonly: bool,
|
||||||
_log_dirty_pages: bool,
|
_log_dirty_pages: bool,
|
||||||
) -> UserMemoryRegion {
|
) -> UserMemoryRegion {
|
||||||
let mut flags = HV_MAP_GPA_READABLE | HV_MAP_GPA_EXECUTABLE;
|
let mut flags = HV_MAP_GPA_READABLE | HV_MAP_GPA_EXECUTABLE | HV_MAP_GPA_ADJUSTABLE;
|
||||||
if !readonly {
|
if !readonly {
|
||||||
flags |= HV_MAP_GPA_WRITABLE;
|
flags |= HV_MAP_GPA_WRITABLE;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user