|
@@ -189,8 +189,11 @@ static inline unsigned FNAME(gpte_access)(struct kvm_vcpu *vcpu, u64 gpte)
|
|
((gpte & VMX_EPT_EXECUTABLE_MASK) ? ACC_EXEC_MASK : 0) |
|
|
((gpte & VMX_EPT_EXECUTABLE_MASK) ? ACC_EXEC_MASK : 0) |
|
|
ACC_USER_MASK;
|
|
ACC_USER_MASK;
|
|
#else
|
|
#else
|
|
- access = (gpte & (PT_WRITABLE_MASK | PT_USER_MASK)) | ACC_EXEC_MASK;
|
|
|
|
- access &= ~(gpte >> PT64_NX_SHIFT);
|
|
|
|
|
|
+ BUILD_BUG_ON(ACC_EXEC_MASK != PT_PRESENT_MASK);
|
|
|
|
+ BUILD_BUG_ON(ACC_EXEC_MASK != 1);
|
|
|
|
+ access = gpte & (PT_WRITABLE_MASK | PT_USER_MASK | PT_PRESENT_MASK);
|
|
|
|
+ /* Combine NX with P (which is set here) to get ACC_EXEC_MASK. */
|
|
|
|
+ access ^= (gpte >> PT64_NX_SHIFT);
|
|
#endif
|
|
#endif
|
|
|
|
|
|
return access;
|
|
return access;
|