Hi IA32_EPT_VPID_CAP_XO_TRANSLATIONS is specified incorrectly, see the patch below.
Cheers Adam On Fri, Feb 26, 2021 at 01:08:17PM +0800, Adam Steen wrote: > Hi > > IA32_EPT_VPID_CAP_XO_TRANSLATIONS is specified as 0x0 and not (1ULL << 0) > ie 0 and not bit 0 as on. > > Please see the attach diff to correct this and rename > IA32_EPT_VPID_CAP_XO_TRANSLATIONS to IA32_EPT_VPID_CAP_XO to reduce > wordyness. > > Cheers > Adam > > diff 0e7183d43c8ed36e5d169be05df61472565710eb /home/adams/devl/openbsd/src > blob - 72104b78c733f4ce8ee91910b0b4a6f0f51c15aa > file + sys/arch/amd64/amd64/vmm.c > --- sys/arch/amd64/amd64/vmm.c > +++ sys/arch/amd64/amd64/vmm.c > @@ -916,7 +916,7 @@ vm_mprotect_ept(struct vm_mprotect_ept_params *vmep) > if (vmm_softc->mode == VMM_MODE_EPT) { > msr = rdmsr(IA32_VMX_EPT_VPID_CAP); > if (prot == PROT_EXEC && > - (msr & IA32_EPT_VPID_CAP_XO_TRANSLATIONS) == 0) { > + (msr & IA32_EPT_VPID_CAP_XO) == 0) { > DPRINTF("%s: Execute only permissions unsupported," > " adding read permission\n", __func__); > > blob - e0232887ff69a882c00e3b4059baa2b12f047c2d > file + sys/arch/amd64/include/specialreg.h > --- sys/arch/amd64/include/specialreg.h > +++ sys/arch/amd64/include/specialreg.h > @@ -957,7 +957,7 @@ > #define IA32_VMX_TRUE_ENTRY_CTLS 0x490 > #define IA32_VMX_VMFUNC 0x491 > > -#define IA32_EPT_VPID_CAP_XO_TRANSLATIONS 0x0 > +#define IA32_EPT_VPID_CAP_XO (1ULL << 0) > #define IA32_EPT_VPID_CAP_PAGE_WALK_4 (1ULL << 6) > #define IA32_EPT_VPID_CAP_WB (1ULL << 14) > #define IA32_EPT_VPID_CAP_AD_BITS (1ULL << 21)