• Peter Feiner's avatar
    x86: kvm: mmu: use ept a/d in vmcs02 iff used in vmcs12 · 995f00a6
    Peter Feiner authored
    EPT A/D was enabled in the vmcs02 EPTP regardless of the vmcs12's EPTP
    value. The problem is that enabling A/D changes the behavior of L2's
    x86 page table walks as seen by L1. With A/D enabled, x86 page table
    walks are always treated as EPT writes.
    
    Commit ae1e2d10 ("kvm: nVMX: support EPT accessed/dirty bits",
    2017-03-30) tried to work around this problem by clearing the write
    bit in the exit qualification for EPT violations triggered by page
    walks.  However, that fixup introduced the opposite bug: page-table walks
    that actually set x86 A/D bits were *missing* the write bit in the exit
    qualification.
    
    This patch fixes the problem by disabling EPT A/D in the shadow MMU
    when EPT A/D is disabled in vmcs12's EPTP.
    Signed-off-by: default avatarPeter Feiner <pfeiner@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    995f00a6
mmu.c 137 KB