From 1905ed61247a376be8f7800097eb596b0c982263 Mon Sep 17 00:00:00 2001 From: Fei Li Date: Mon, 25 Oct 2021 14:41:24 +0800 Subject: [PATCH] hv: vMSR: minor fix about rdmsr_vmexit_handler Specifying a reserved or unimplemented MSR address in ECX for rdmsr will cause a general protection exception. In this case, we should not change the contents of registers EDX:EAX. Tracked-On: #4550 Signed-off-by: Fei Li --- hypervisor/arch/x86/guest/vmsr.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/hypervisor/arch/x86/guest/vmsr.c b/hypervisor/arch/x86/guest/vmsr.c index a6b26196e..356ca23a0 100644 --- a/hypervisor/arch/x86/guest/vmsr.c +++ b/hypervisor/arch/x86/guest/vmsr.c @@ -713,9 +713,11 @@ int32_t rdmsr_vmexit_handler(struct acrn_vcpu *vcpu) } } - /* Store the MSR contents in RAX and RDX */ - vcpu_set_gpreg(vcpu, CPU_REG_RAX, v & 0xffffffffU); - vcpu_set_gpreg(vcpu, CPU_REG_RDX, v >> 32U); + if (err == 0) { + /* Store the MSR contents in RAX and RDX */ + vcpu_set_gpreg(vcpu, CPU_REG_RAX, v & 0xffffffffU); + vcpu_set_gpreg(vcpu, CPU_REG_RDX, v >> 32U); + } TRACE_2L(TRACE_VMEXIT_RDMSR, msr, v);