Skip to content

Commit

Permalink
KVM: nSVM: Set the shadow root level to the TDP level for nested NPT
Browse files Browse the repository at this point in the history
Override the shadow root level in the MMU context when configuring
NPT for shadowing nested NPT.  The level is always tied to the TDP level
of the host, not whatever level the guest happens to be using.

Fixes: 096586f ("KVM: nSVM: Correctly set the shadow NPT root level in its MMU role")
Cc: stable@vger.kernel.org
Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-Id: <20210305011101.3597423-2-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
Sean Christopherson authored and Paolo Bonzini committed Mar 15, 2021
1 parent 6d1b867 commit a3322d5
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions arch/x86/kvm/mmu/mmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -4649,12 +4649,17 @@ void kvm_init_shadow_npt_mmu(struct kvm_vcpu *vcpu, u32 cr0, u32 cr4, u32 efer,
struct kvm_mmu *context = &vcpu->arch.guest_mmu;
union kvm_mmu_role new_role = kvm_calc_shadow_npt_root_page_role(vcpu);

context->shadow_root_level = new_role.base.level;

__kvm_mmu_new_pgd(vcpu, nested_cr3, new_role.base, false, false);

if (new_role.as_u64 != context->mmu_role.as_u64)
if (new_role.as_u64 != context->mmu_role.as_u64) {
shadow_mmu_init_context(vcpu, context, cr0, cr4, efer, new_role);

/*
* Override the level set by the common init helper, nested TDP
* always uses the host's TDP configuration.
*/
context->shadow_root_level = new_role.base.level;
}
}
EXPORT_SYMBOL_GPL(kvm_init_shadow_npt_mmu);

Expand Down

0 comments on commit a3322d5

Please sign in to comment.