mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-12 08:48:48 +00:00
KVM: MMU: fix missing locking in alloc_mmu_pages
n_requested_mmu_pages/n_free_mmu_pages are used by kvm_mmu_change_mmu_pages to calculate the number of pages to zap. alloc_mmu_pages, called from the vcpu initialization path, modifies this variables without proper locking, which can result in a negative value in kvm_mmu_change_mmu_pages (say, with cpu hotplug). Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
3662cb1cd6
commit
6a1ac77110
@ -2728,12 +2728,14 @@ static int alloc_mmu_pages(struct kvm_vcpu *vcpu)
|
||||
|
||||
ASSERT(vcpu);
|
||||
|
||||
spin_lock(&vcpu->kvm->mmu_lock);
|
||||
if (vcpu->kvm->arch.n_requested_mmu_pages)
|
||||
vcpu->kvm->arch.n_free_mmu_pages =
|
||||
vcpu->kvm->arch.n_requested_mmu_pages;
|
||||
else
|
||||
vcpu->kvm->arch.n_free_mmu_pages =
|
||||
vcpu->kvm->arch.n_alloc_mmu_pages;
|
||||
spin_unlock(&vcpu->kvm->mmu_lock);
|
||||
/*
|
||||
* When emulating 32-bit mode, cr3 is only 32 bits even on x86_64.
|
||||
* Therefore we need to allocate shadow page tables in the first
|
||||
|
Loading…
x
Reference in New Issue
Block a user