Although currently vmx_pf_exception_test can succeed, its success is actually because we are using identical mappings in the page tables and EB.PF is not set by L1. In practice, the #PFs shall be expected by L1, if it is using shadowing for L2. So just set up the EPT, and clear the EB.PT, then L1 has the right to claim a failure if a #PF is encountered. Signed-off-by: Yu Zhang <yu.c.zhang@xxxxxxxxxxxxxxx> --- x86/vmx_tests.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c index 4d581e7..cc90611 100644 --- a/x86/vmx_tests.c +++ b/x86/vmx_tests.c @@ -10639,6 +10639,17 @@ static void __vmx_pf_exception_test(invalidate_tlb_t inv_fn, void *data) static void vmx_pf_exception_test(void) { + u32 eb; + + if (setup_ept(false)) { + printf("EPT not supported.\n"); + return; + } + + eb = vmcs_read(EXC_BITMAP); + eb &= ~(1 << PF_VECTOR); + vmcs_write(EXC_BITMAP, eb); + __vmx_pf_exception_test(NULL, NULL); } -- 2.25.1