KVM: MMU: Fix setting the accessed bit on non-speculative sptes
authorAvi Kivity <avi@qumranet.com>
Thu, 6 Aug 2009 17:39:48 +0000 (14:39 -0300)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 9 Sep 2009 03:17:07 +0000 (20:17 -0700)
(cherry picked from commit 3201b5d9f0f7ef392886cd76dcd2c69186d9d5cd)

The accessed bit was accidentally turned on in a random flag word, rather
than, the spte itself, which was lucky, since it used the non-EPT compatible
PT_ACCESSED_MASK.

Fix by turning the bit on in the spte and changing it to use the portable
accessed mask.

Signed-off-by: Avi Kivity <avi@qumranet.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
arch/x86/kvm/mmu.c

index 4c94494..51ff937 100644 (file)
@@ -1162,7 +1162,7 @@ static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *shadow_pte,
         */
        spte = shadow_base_present_pte | shadow_dirty_mask;
        if (!speculative)
-               pte_access |= PT_ACCESSED_MASK;
+               spte |= shadow_accessed_mask;
        if (!dirty)
                pte_access &= ~ACC_WRITE_MASK;
        if (pte_access & ACC_EXEC_MASK)