lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <20220302111334.12689-12-likexu@tencent.com> Date: Wed, 2 Mar 2022 19:13:33 +0800 From: Like Xu <like.xu.linux@...il.com> To: Paolo Bonzini <pbonzini@...hat.com> Cc: Jim Mattson <jmattson@...gle.com>, kvm@...r.kernel.org, Sean Christopherson <seanjc@...gle.com>, Wanpeng Li <wanpengli@...cent.com>, Vitaly Kuznetsov <vkuznets@...hat.com>, Joerg Roedel <joro@...tes.org>, linux-kernel@...r.kernel.org, Like Xu <likexu@...cent.com> Subject: [PATCH v2 11/12] KVM: x86/pmu: Protect kvm->arch.pmu_event_filter with SRCU From: Like Xu <likexu@...cent.com> Similar to "kvm->arch.msr_filter", KVM should guarantee that vCPUs will see either the previous filter or the new filter when user space calls KVM_SET_PMU_EVENT_FILTER ioctl with the vCPU running so that guest pmu events with identical settings in both the old and new filter have deterministic behavior. Fixes: 66bb8a065f5a ("KVM: x86: PMU Event Filter") Signed-off-by: Like Xu <likexu@...cent.com> Reviewed-by: Wanpeng Li <wanpengli@...cent.com> --- arch/x86/kvm/pmu.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c index 60f44252540a..17c61c990282 100644 --- a/arch/x86/kvm/pmu.c +++ b/arch/x86/kvm/pmu.c @@ -185,11 +185,12 @@ static bool check_pmu_event_filter(struct kvm_pmc *pmc) struct kvm *kvm = pmc->vcpu->kvm; bool allow_event = true; __u64 key; - int idx; + int idx, srcu_idx; if (kvm_x86_ops.pmu_ops->hw_event_is_unavail(pmc)) return false; + srcu_idx = srcu_read_lock(&kvm->srcu); filter = srcu_dereference(kvm->arch.pmu_event_filter, &kvm->srcu); if (!filter) goto out; @@ -212,6 +213,7 @@ static bool check_pmu_event_filter(struct kvm_pmc *pmc) } out: + srcu_read_unlock(&kvm->srcu, srcu_idx); return allow_event; } -- 2.35.1
Powered by blists - more mailing lists