• Xiao Guangrong's avatar
    KVM: MMU: fix Dirty bit missed if CR0.WP = 0 · c2288505
    Xiao Guangrong authored
    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: default avatarXiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
    Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
    c2288505
paging_tmpl.h 20.5 KB