From b4312efbd7a5abbb46d0c00b74ffb7ac42801617 Mon Sep 17 00:00:00 2001 From: Jian Jun Chen Date: Fri, 20 Dec 2019 09:15:44 +0800 Subject: [PATCH] hv: TLFS: inject #GP to guest VM for writing of read-only MSRs TLFS spec defines that HV_X64_MSR_VP_INDEX and HV_X64_MSR_TIME_REF_COUNT are read-only MSRs. Any attempt to write to them results in a #GP fault. Fix the issue by returning error in handler hyperv_wrmsr() of MSRs HV_X64_MSR_VP_INDEX/HV_X64_MSR_TIME_REF_COUNT emulation. Tracked-On: #5956 Signed-off-by: Jian Jun Chen Signed-off-by: Shuo A Liu Acked-by: Eddie Dong --- hypervisor/arch/x86/guest/hyperv.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/hypervisor/arch/x86/guest/hyperv.c b/hypervisor/arch/x86/guest/hyperv.c index 3e53bdf3e..355c8aefb 100644 --- a/hypervisor/arch/x86/guest/hyperv.c +++ b/hypervisor/arch/x86/guest/hyperv.c @@ -192,15 +192,13 @@ hyperv_wrmsr(struct acrn_vcpu *vcpu, uint32_t msr, uint64_t wval) vcpu->vm->arch_vm.hyperv.hypercall_page.val64 = wval; hyperv_setup_hypercall_page(vcpu, wval); break; - case HV_X64_MSR_VP_INDEX: - /* read only */ - break; - case HV_X64_MSR_TIME_REF_COUNT: - /* read only */ - break; case HV_X64_MSR_REFERENCE_TSC: hyperv_setup_tsc_page(vcpu, wval); break; + case HV_X64_MSR_VP_INDEX: + case HV_X64_MSR_TIME_REF_COUNT: + /* read only */ + /* fallthrough */ default: pr_err("hv: %s: unexpected MSR[0x%x] write", __func__, msr); ret = -1;