Re: [PATCH 2/2] KVM: x86: always allow host-initiated writes to PMU MSRs

From: Sean Christopherson
Date: Wed Jun 08 2022 - 18:22:56 EST


On Tue, May 31, 2022, Paolo Bonzini wrote:
> Whenever an MSR is part of KVM_GET_MSR_INDEX_LIST, it has to be always
> retrievable and settable with KVM_GET_MSR and KVM_SET_MSR. Accept
> the PMU MSRs unconditionally in intel_is_valid_msr, if the access was
> host-initiated.

...so that userspace can explode in intel_get_msr() or intel_set_msr(). Selftests
that regurgitate MSRs are still failing. The below "fixes" the issue, but I don't
know that it's actually a good idea. I also haven't tried AMD.

diff --git a/arch/x86/kvm/vmx/pmu_intel.c b/arch/x86/kvm/vmx/pmu_intel.c
index 515ab6594333..fcb5224028a6 100644
--- a/arch/x86/kvm/vmx/pmu_intel.c
+++ b/arch/x86/kvm/vmx/pmu_intel.c
@@ -401,7 +401,7 @@ static int intel_pmu_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
return 0;
}

- return 1;
+ return !msr_info->host_initiated;
}

static int intel_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
@@ -497,7 +497,7 @@ static int intel_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
return 0;
}

- return 1;
+ return !msr_info->host_initiated;
}

static void setup_fixed_pmc_eventsel(struct kvm_pmu *pmu)