# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1182182346 -3600
# Node ID c3f280acf41af0ca876002e6e501cd67e72b3725
# Parent 342c85cfd00bbdae6a924880a7a9f6899a83f2d5
hvm vmx: Make VMX-related MSRs invisible to the guest.
Signed-off-by: Shane Wang <shane.wang@xxxxxxxxx>
---
xen/arch/x86/hvm/vmx/vmx.c | 22 ++++++++++++++++++----
1 files changed, 18 insertions(+), 4 deletions(-)
diff -r 342c85cfd00b -r c3f280acf41a xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c Mon Jun 18 16:52:04 2007 +0100
+++ b/xen/arch/x86/hvm/vmx/vmx.c Mon Jun 18 16:59:06 2007 +0100
@@ -2549,7 +2549,8 @@ static inline int vmx_do_msr_read(struct
HVM_DBG_LOG(DBG_LEVEL_1, "ecx=%x", ecx);
- switch (ecx) {
+ switch ( ecx )
+ {
case MSR_IA32_TIME_STAMP_COUNTER:
msr_content = hvm_get_guest_time(v);
break;
@@ -2565,6 +2566,8 @@ static inline int vmx_do_msr_read(struct
case MSR_IA32_APICBASE:
msr_content = vcpu_vlapic(v)->hw.apic_base_msr;
break;
+ case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_CR4_FIXED1:
+ goto gp_fault;
default:
if ( long_mode_do_msr_read(regs) )
goto done;
@@ -2576,8 +2579,8 @@ static inline int vmx_do_msr_read(struct
regs->edx = edx;
goto done;
}
- vmx_inject_hw_exception(v, TRAP_gp_fault, 0);
- return 0;
+
+ goto gp_fault;
}
regs->eax = msr_content & 0xFFFFFFFF;
@@ -2589,6 +2592,10 @@ done:
ecx, (unsigned long)regs->eax,
(unsigned long)regs->edx);
return 1;
+
+gp_fault:
+ vmx_inject_hw_exception(v, TRAP_gp_fault, 0);
+ return 0;
}
static int vmx_alloc_vlapic_mapping(struct domain *d)
@@ -2667,7 +2674,8 @@ static inline int vmx_do_msr_write(struc
msr_content = (u32)regs->eax | ((u64)regs->edx << 32);
HVMTRACE_2D(MSR_WRITE, v, ecx, msr_content);
- switch (ecx) {
+ switch ( ecx )
+ {
case MSR_IA32_TIME_STAMP_COUNTER:
hvm_set_guest_time(v, msr_content);
pt_reset(v);
@@ -2684,6 +2692,8 @@ static inline int vmx_do_msr_write(struc
case MSR_IA32_APICBASE:
vlapic_msr_set(vcpu_vlapic(v), msr_content);
break;
+ case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_CR4_FIXED1:
+ goto gp_fault;
default:
if ( !long_mode_do_msr_write(regs) )
wrmsr_hypervisor_regs(ecx, regs->eax, regs->edx);
@@ -2691,6 +2701,10 @@ static inline int vmx_do_msr_write(struc
}
return 1;
+
+gp_fault:
+ vmx_inject_hw_exception(v, TRAP_gp_fault, 0);
+ return 0;
}
static void vmx_do_hlt(void)
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|