]> git.baikalelectronics.ru Git - kernel.git/commit
KVM: MMU: fix Dirty bit missed if CR0.WP = 0
authorXiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
Tue, 8 Jan 2013 06:36:04 +0000 (14:36 +0800)
committerMarcelo Tosatti <mtosatti@redhat.com>
Thu, 10 Jan 2013 17:28:08 +0000 (15:28 -0200)
commit3185ab0834cc0ea561c4ff58bd3215f0472a1fac
treef3d7038088a6d06e897c0d71c3d55aed690105a0
parentd34738a6f74502f55a6d98592f20dd25f5d0cf8e
KVM: MMU: fix Dirty bit missed if CR0.WP = 0

If the write-fault access is from supervisor and CR0.WP is not set on the
vcpu, kvm will fix it by adjusting pte access - it sets the W bit on pte
and clears U bit. This is the chance that kvm can change pte access from
readonly to writable

Unfortunately, the pte access is the access of 'direct' shadow page table,
means direct sp.role.access = pte_access, then we will create a writable
spte entry on the readonly shadow page table. It will cause Dirty bit is
not tracked when two guest ptes point to the same large page. Note, it
does not have other impact except Dirty bit since cr0.wp is encoded into
sp.role

It can be fixed by adjusting pte access before establishing shadow page
table. Also, after that, no mmu specified code exists in the common function
and drop two parameters in set_spte

Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/x86/kvm/mmu.c
arch/x86/kvm/paging_tmpl.h