On 22/06/2016 18:10, Bandan Das wrote: >>> >> + if (!shadow_xonly_valid) >>> >> + spte = PT_PRESENT_MASK; >>> >> if (!speculative) >>> >> spte |= shadow_accessed_mask; >>> >> >>> >> @@ -2537,8 +2538,12 @@ static int set_spte(struct kvm_vcpu *vcpu, u64 *sptep, >>> >> else >>> >> spte |= shadow_nx_mask; >>> >> >>> >> - if (pte_access & ACC_USER_MASK) >>> >> - spte |= shadow_user_mask; >>> >> + if (pte_access & ACC_USER_MASK) { >>> >> + if (shadow_xonly_valid) >>> >> + spte |= PT_PRESENT_MASK; >>> >> + else >>> >> + spte |= shadow_user_mask; >>> >> + } >> > >> > Can you instead pass VMX_READABLE_MASK to kvm_mmu_set_mask_ptes in vmx.c? > So, leave spte = PT_PRESENT_MASK as is and make VMX_READABLE_MASK 1ULL if > execute only is supported ? > And then : > if !(pte_access & ACC_USER_MASK) { > spte &= ~VMX_READABLE_MASK > No, I meant something like spte = 0; if (!shadow_xonly_valid) spte = PT_PRESENT_MASK; ... if (pte_access & ACC_USER_MASK) spte |= shadow_user_mask; Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html