> > @@ -883,7 +884,7 @@ static gpa_t FNAME(gva_to_gpa)(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, > > */ > > static int FNAME(sync_spte)(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp, int i) > > { > > - bool host_writable; > > + bool host_writable, is_refcounted; > > gpa_t first_pte_gpa; > > u64 *sptep, spte; > > struct kvm_memory_slot *slot; > > @@ -940,10 +941,12 @@ static int FNAME(sync_spte)(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp, int > > sptep = &sp->spt[i]; > > spte = *sptep; > > host_writable = spte & shadow_host_writable_mask; > > + // TODO: is this correct? > > + is_refcounted = spte & SPTE_MMU_PAGE_REFCOUNTED; > > slot = kvm_vcpu_gfn_to_memslot(vcpu, gfn); > > make_spte(vcpu, sp, slot, pte_access, gfn, > > spte_to_pfn(spte), spte, true, false, > > - host_writable, &spte); > > + host_writable, is_refcounted, &spte); > > Could we restrict that a non-refcounted page shall not be used as shadow page? Oh, sorry. It's not about shadow page. It's about guest page being mapped as not refcounted. Silly me... B.R. Yu