x86: Skip APIC-access address tests beyond mapped RAM
PATCH 1/1 x86: Skip APIC-access address tests beyond mapped RAM
We no longer have any tests in vmx_tests.c that use xfail_beyond_mapped_ram. However, an upcoming change to kvm will exit to userspace with a kvm internal error whenever launching a nested VM with the vmcs12 APIC-access address set to a non-cacheable address in L1. Reuse the xfail_beyond_mapped_ram plumbing to support skip_beyond_mapped_ram, and skip any APIC-access address tests that use addresses beyond mapped RAM, so that the test won't induce a kvm internal error.
--- x86/vmx_tests.c | 289 +++++++++++++++++++++++------------------------- 1 file changed, 139 insertions(+), 150 deletions(-)
x86/vmx_tests.c +139 -150
@@ -3351,13 +3351,13 @@ success:/* * Try to launch the current VMCS. */ -static void test_vmx_vmlaunch (u32 xerror,bool xfail) +static void test_vmx_vmlaunch (u32 xerror) {bool success =vmlaunch_succeeds ();u32 vmx_inst_err; -report_xfail ("vmlaunch %s" , xfail, success == !xerror, - !xerror ?"succeeds" :"fails" ); +report ("vmlaunch %s" , success == !xerror, + !xerror ?"succeeds" :"fails" );if (!success && xerror) { vmx_inst_err =vmcs_read (VMX_INST_ERROR ); report("VMX inst error is %d (actual %d)",
@@ -3365,14 +3365,14 @@ static void test_vmx_vmlaunch(u32 xerror, bool xfail) } } -static void test_vmx_invalid_controls (bool xfail) +static void test_vmx_invalid_controls (void ) { -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_CONTROL_FIELD , xfail); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_CONTROL_FIELD ); } -static void test_vmx_valid_controls (bool xfail) +static void test_vmx_valid_controls (void ) { -test_vmx_vmlaunch (0 , xfail); +test_vmx_vmlaunch (0 ); }/*
@@ -3410,9 +3410,9 @@ static void test_rsvd_ctl_bit_value(const char *name, union vmx_ctrl_msr msr, expected = !(msr.set & mask); }if (expected) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();vmcs_write (encoding, controls);report_prefix_pop (); }
@@ -3509,9 +3509,9 @@ static void try_cr3_target_count(unsigned i, unsigned max)report_prefix_pushf ("CR3 target count 0x%x" , i);vmcs_write (CR3_TARGET_COUNT , i);if (i <= max) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }
@@ -3546,23 +3546,21 @@ static void test_vmcs_addr(const char *name,enum Encoding encoding, u64 align, bool ignored, - bool xfail_beyond_mapped_ram, + bool skip_beyond_mapped_ram, u64 addr) { - bool xfail = - (xfail_beyond_mapped_ram && - addr >fwcfg_get_u64 (FW_CFG_RAM_SIZE ) - align && - addr < (1ul <<cpuid_maxphyaddr ())); - report_prefix_pushf("%s = %lx", name, addr);vmcs_write (encoding, addr); -if (ignored || (IS_ALIGNED (addr, align) && +if (skip_beyond_mapped_ram && + addr >fwcfg_get_u64 (FW_CFG_RAM_SIZE ) - align && + addr < (1ul <<cpuid_maxphyaddr ())) +printf ("Skipping physical address beyond mapped RAM\n" ); +else if (ignored || (IS_ALIGNED (addr, align) && addr < (1ul <<cpuid_maxphyaddr ()))) -test_vmx_valid_controls (xfail); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (xfail); +test_vmx_invalid_controls ();report_prefix_pop (); - xfail = false; }/*
@@ -3572,7 +3570,7 @@ static void test_vmcs_addr_values(const char *name,enum Encoding encoding, u64 align, bool ignored, - bool xfail_beyond_mapped_ram, + bool skip_beyond_mapped_ram, u32 bit_start, u32 bit_end) { unsigned i;
@@ -3580,17 +3578,17 @@ static void test_vmcs_addr_values(const char *name,for (i = bit_start; i <= bit_end; i++)test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram,1ul << i); + skip_beyond_mapped_ram,1ul << i);test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram,PAGE_SIZE -1 ); + skip_beyond_mapped_ram,PAGE_SIZE -1 );test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram,PAGE_SIZE ); + skip_beyond_mapped_ram,PAGE_SIZE );test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram, + skip_beyond_mapped_ram, (1ul <<cpuid_maxphyaddr ()) -PAGE_SIZE );test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram,-1ul ); + skip_beyond_mapped_ram,-1ul );vmcs_write (encoding, orig_val); }
@@ -3602,7 +3600,7 @@ static void test_vmcs_addr_values(const char *name,static void test_vmcs_addr_reference (u32 control_bit,enum Encoding field,const char *field_name,const char *control_name,u64 align, -bool xfail_beyond_mapped_ram, +bool skip_beyond_mapped_ram,bool control_primary) {u32 primary =vmcs_read (CPU_EXEC_CTRL0 );
@@ -3628,7 +3626,7 @@ static void test_vmcs_addr_reference(u32 control_bit, enum Encoding field, }test_vmcs_addr_values (field_name, field, align, false, - xfail_beyond_mapped_ram,0 ,63 ); + skip_beyond_mapped_ram,0 ,63 );report_prefix_pop ();report_prefix_pushf ("%s disabled" , control_name);
@@ -3716,7 +3714,7 @@ static void test_apic_access_addr(void)test_vmcs_addr_reference (CPU_VIRT_APIC_ACCESSES ,APIC_ACCS_ADDR ,"APIC-access address" ,"virtualize APIC-accesses" ,PAGE_SIZE , - false, false); + true, false); }static bool set_bit_pattern (u8 mask,u32 *secondary)
@@ -3789,9 +3787,9 @@ static void test_apic_virtual_ctls(void)report_prefix_pushf ("Use TPR shadow %s, virtualize x2APIC mode %s, APIC-register virtualization %s, virtual-interrupt delivery %s" , str, (secondary &CPU_VIRT_X2APIC ) ?"enabled" :"disabled" , (secondary &CPU_APIC_REG_VIRT ) ?"enabled" :"disabled" , (secondary &CPU_VINTD ) ?"enabled" :"disabled" );if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }
@@ -3818,22 +3816,22 @@ static void test_apic_virtual_ctls(void) secondary &= ~CPU_VIRT_APIC_ACCESSES ;vmcs_write (CPU_EXEC_CTRL1 , secondary & ~CPU_VIRT_X2APIC );report_prefix_pushf ("Virtualize x2APIC mode disabled; virtualize APIC access disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary |CPU_VIRT_APIC_ACCESSES );report_prefix_pushf ("Virtualize x2APIC mode disabled; virtualize APIC access enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary |CPU_VIRT_X2APIC );report_prefix_pushf ("Virtualize x2APIC mode enabled; virtualize APIC access enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary & ~CPU_VIRT_APIC_ACCESSES );report_prefix_pushf ("Virtualize x2APIC mode enabled; virtualize APIC access disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL0 , saved_primary);
@@ -3862,22 +3860,22 @@ static void test_virtual_intr_ctls(void)vmcs_write (CPU_EXEC_CTRL1 , secondary & ~CPU_VINTD );vmcs_write (PIN_CONTROLS , pin & ~PIN_EXTINT );report_prefix_pushf ("Virtualize interrupt-delivery disabled; external-interrupt exiting disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary |CPU_VINTD );report_prefix_pushf ("Virtualize interrupt-delivery enabled; external-interrupt exiting disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , pin |PIN_EXTINT );report_prefix_pushf ("Virtualize interrupt-delivery enabled; external-interrupt exiting enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , pin & ~PIN_EXTINT );report_prefix_pushf ("Virtualize interrupt-delivery enabled; external-interrupt exiting disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL0 , saved_primary);
@@ -3890,9 +3888,9 @@ static void test_pi_desc_addr(u64 addr, bool ctrl)vmcs_write (POSTED_INTR_DESC_ADDR , addr);report_prefix_pushf ("Process-posted-interrupts enabled; posted-interrupt-descriptor-address 0x%lx" , addr);if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }
@@ -3937,37 +3935,37 @@ static void test_posted_intr(void) secondary &= ~CPU_VINTD ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); secondary |=CPU_VINTD ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); exit_ctl &= ~EXI_INTA ;vmcs_write (EXI_CONTROLS , exit_ctl);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery enabled; acknowledge-interrupt-on-exit disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); exit_ctl |=EXI_INTA ;vmcs_write (EXI_CONTROLS , exit_ctl);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery enabled; acknowledge-interrupt-on-exit enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); secondary &= ~CPU_VINTD ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery disabled; acknowledge-interrupt-on-exit enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); secondary |=CPU_VINTD ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery enabled; acknowledge-interrupt-on-exit enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/*
@@ -3977,21 +3975,21 @@ static void test_posted_intr(void) vec = (1ul << i);vmcs_write (PINV , vec);report_prefix_pushf ("Process-posted-interrupts enabled; posted-interrupt-notification-vector %u" , vec); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); }for (i =8 ; i <16 ; i++) { vec = (1ul << i);vmcs_write (PINV , vec);report_prefix_pushf ("Process-posted-interrupts enabled; posted-interrupt-notification-vector %u" , vec); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); } vec &= ~(0xff <<8 );vmcs_write (PINV , vec);report_prefix_pushf ("Process-posted-interrupts enabled; posted-interrupt-notification-vector %u" , vec); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/*
@@ -4048,19 +4046,19 @@ static void test_vpid(void)vmcs_write (CPU_EXEC_CTRL1 , saved_secondary & ~CPU_VPID );vmcs_write (VPID , vpid);report_prefix_pushf ("VPID disabled; VPID value %x" , vpid); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , saved_secondary |CPU_VPID );report_prefix_pushf ("VPID enabled; VPID value %x" , vpid); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();for (i =0 ; i <16 ; i++) { vpid = (short )1 << i;;vmcs_write (VPID , vpid);report_prefix_pushf ("VPID enabled; VPID value %x" , vpid); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); }
@@ -4088,9 +4086,9 @@ static void try_tpr_threshold_and_vtpr(unsigned threshold, unsigned vtpr)report_prefix_pushf ("TPR threshold 0x%x, VTPR.class 0x%x" , threshold, (vtpr >>4 ) &0xf );if (valid) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }
@@ -4117,7 +4115,7 @@ static void test_invalid_event_injection(void)"RESERVED interruption type invalid [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); ent_intr_info = ent_intr_info_base | INTR_TYPE_EXT_INTR |
@@ -4126,7 +4124,7 @@ static void test_invalid_event_injection(void)"RESERVED interruption type invalid [+]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/* If the interruption type is other event, the vector is 0. */
@@ -4135,7 +4133,7 @@ static void test_invalid_event_injection(void)"(OTHER EVENT && vector != 0) invalid [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/* If the interruption type is NMI, the vector is 2 (negative case). */
@@ -4143,7 +4141,7 @@ static void test_invalid_event_injection(void)report_prefix_pushf ("%s, VM-entry intr info=0x%x" ,"(NMI && vector != 2) invalid [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/* If the interruption type is NMI, the vector is 2 (positive case). */
@@ -4151,7 +4149,7 @@ static void test_invalid_event_injection(void)report_prefix_pushf ("%s, VM-entry intr info=0x%x" ,"(NMI && vector == 2) valid [+]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/*
@@ -4163,7 +4161,7 @@ static void test_invalid_event_injection(void)"(HW exception && vector > 31) invalid [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/*
@@ -4183,7 +4181,7 @@ static void test_invalid_event_injection(void) ent_intr_info);vmcs_write (GUEST_CR0 , guest_cr0_save & ~X86_CR0_PE & ~X86_CR0_PG );vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); ent_intr_info = ent_intr_info_base | INTR_INFO_DELIVER_CODE_MASK |
@@ -4193,7 +4191,7 @@ static void test_invalid_event_injection(void) ent_intr_info);vmcs_write (GUEST_CR0 , guest_cr0_save & ~X86_CR0_PE & ~X86_CR0_PG );vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();if (enable_unrestricted_guest ())
@@ -4206,7 +4204,7 @@ static void test_invalid_event_injection(void) ent_intr_info);vmcs_write (GUEST_CR0 , guest_cr0_save & ~X86_CR0_PE & ~X86_CR0_PG );vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); ent_intr_info = ent_intr_info_base | INTR_TYPE_HARD_EXCEPTION |
@@ -4216,7 +4214,7 @@ static void test_invalid_event_injection(void) ent_intr_info);vmcs_write (GUEST_CR0 , guest_cr0_save |X86_CR0_PE );vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary_save);
@@ -4238,7 +4236,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr info=0x%x [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }report_prefix_pop ();
@@ -4272,7 +4270,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr info=0x%x [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/* Positive case */
@@ -4284,7 +4282,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr info=0x%x [+]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); }report_prefix_pop ();
@@ -4299,7 +4297,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr info=0x%x [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }report_prefix_pop ();
@@ -4319,7 +4317,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr error=0x%x [-]" , ent_intr_err);vmcs_write (ENT_INTR_ERROR , ent_intr_err); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }vmcs_write (ENT_INTR_ERROR ,0x00000000 );
@@ -4356,7 +4354,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr length = 0x%x [-]" , ent_intr_len);vmcs_write (ENT_INST_LEN , ent_intr_len); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/* Instruction length set to 16 should fail */
@@ -4364,7 +4362,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr length = 0x%x [-]" , ent_intr_len);vmcs_write (ENT_INST_LEN ,0x00000010 ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();report_prefix_pop ();
@@ -4405,9 +4403,9 @@ static void try_tpr_threshold(unsigned threshold)vmcs_write (TPR_THRESHOLD , threshold);report_prefix_pushf ("TPR threshold 0x%x, VTPR.class 0xf" , threshold);if (valid) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();if (valid)
@@ -4557,22 +4555,22 @@ static void test_nmi_ctrls(void)vmcs_write (PIN_CONTROLS , test_pin_ctrls);report_prefix_pushf ("NMI-exiting disabled, virtual-NMIs disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls |PIN_VIRT_NMI );report_prefix_pushf ("NMI-exiting disabled, virtual-NMIs enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls | (PIN_NMI |PIN_VIRT_NMI ));report_prefix_pushf ("NMI-exiting enabled, virtual-NMIs enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls |PIN_NMI );report_prefix_pushf ("NMI-exiting enabled, virtual-NMIs disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();if (!(ctrl_cpu_rev[0 ].clr &CPU_NMI_WINDOW )) {
@@ -4583,25 +4581,25 @@ static void test_nmi_ctrls(void)vmcs_write (PIN_CONTROLS , test_pin_ctrls);vmcs_write (CPU_EXEC_CTRL0 , test_cpu_ctrls0 |CPU_NMI_WINDOW );report_prefix_pushf ("Virtual-NMIs disabled, NMI-window-exiting enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls);vmcs_write (CPU_EXEC_CTRL0 , test_cpu_ctrls0);report_prefix_pushf ("Virtual-NMIs disabled, NMI-window-exiting disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls | (PIN_NMI |PIN_VIRT_NMI ));vmcs_write (CPU_EXEC_CTRL0 , test_cpu_ctrls0 |CPU_NMI_WINDOW );report_prefix_pushf ("Virtual-NMIs enabled, NMI-window-exiting enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls | (PIN_NMI |PIN_VIRT_NMI ));vmcs_write (CPU_EXEC_CTRL0 , test_cpu_ctrls0);report_prefix_pushf ("Virtual-NMIs enabled, NMI-window-exiting disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/* Restore the controls to their original values */
@@ -4616,9 +4614,9 @@ static void test_eptp_ad_bit(u64 eptp, bool ctrl)report_prefix_pushf ("Enable-EPT enabled; EPT accessed and dirty flag %s" , (eptp &EPTP_AD_FLAG ) ?"1" :"0" );if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }
@@ -4702,9 +4700,9 @@ static void test_ept_eptp(void)report_prefix_pushf ("Enable-EPT enabled; EPT memory type %lu" , eptp &EPT_MEM_TYPE_MASK );if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }
@@ -4725,9 +4723,9 @@ static void test_ept_eptp(void)report_prefix_pushf ("Enable-EPT enabled; EPT page walk length %lu" , eptp &EPTP_PG_WALK_LEN_MASK );if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }
@@ -4765,9 +4763,9 @@ static void test_ept_eptp(void) (eptp >>EPTP_RESERV_BITS_SHIFT ) & EPTP_RESERV_BITS_MASK);if (i ==0 ) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }
@@ -4785,16 +4783,16 @@ static void test_ept_eptp(void)report_prefix_pushf ("Enable-EPT enabled; reserved bits [63:N] %lu" , (eptp >> maxphysaddr) & resv_bits_mask);if (j < maxphysaddr) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); } secondary &= ~(CPU_EPT |CPU_URG );vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Enable-EPT disabled, unrestricted-guest disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();if (!(ctrl_cpu_rev[1 ].clr &CPU_URG ))
@@ -4803,20 +4801,20 @@ static void test_ept_eptp(void) secondary |=CPU_URG ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Enable-EPT disabled, unrestricted-guest enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); secondary |=CPU_EPT ;setup_dummy_ept ();report_prefix_pushf ("Enable-EPT enabled, unrestricted-guest enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); skip_unrestricted_guest: secondary &= ~CPU_URG ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Enable-EPT enabled, unrestricted-guest disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL0 , primary_saved);
@@ -4853,25 +4851,25 @@ static void test_pml(void) secondary &= ~(CPU_PML |CPU_EPT );vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("enable-PML disabled, enable-EPT disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); secondary |=CPU_PML ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("enable-PML enabled, enable-EPT disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); secondary |=CPU_EPT ;setup_dummy_ept ();report_prefix_pushf ("enable-PML enabled, enable-EPT enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); secondary &= ~CPU_PML ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("enable-PML disabled, enable EPT enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); test_vmcs_addr_reference(CPU_PML, PMLADDR, "PML address", "PML",
@@ -4905,25 +4903,25 @@ static void test_vmx_preemption_timer(void) exit &= ~EXI_SAVE_PREEMPT ;vmcs_write (EXI_CONTROLS , exit);report_prefix_pushf ("enable-VMX-preemption-timer enabled, save-VMX-preemption-timer disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); exit |=EXI_SAVE_PREEMPT ;vmcs_write (EXI_CONTROLS , exit);report_prefix_pushf ("enable-VMX-preemption-timer enabled, save-VMX-preemption-timer enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); pin &= ~PIN_PREEMPT ;vmcs_write (PIN_CONTROLS , pin);report_prefix_pushf ("enable-VMX-preemption-timer disabled, save-VMX-preemption-timer enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); exit &= ~EXI_SAVE_PREEMPT ;vmcs_write (EXI_CONTROLS , exit);report_prefix_pushf ("enable-VMX-preemption-timer disabled, save-VMX-preemption-timer disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , saved_pin);
@@ -4983,7 +4981,7 @@ static void test_entry_msr_load(void)vmcs_write (ENTER_MSR_LD_ADDR , tmp);report_prefix_pushf ("VM-entry MSR-load addr [4:0] %lx" , tmp &0xf ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }
@@ -5005,16 +5003,16 @@ static void test_entry_msr_load(void)1ul << i;vmcs_write (ENTER_MSR_LD_ADDR , tmp - (entry_msr_ld_cnt *16 -1 )); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls (); }vmcs_write (ENT_MSR_LD_CNT ,2 );vmcs_write (ENTER_MSR_LD_ADDR , (1ULL <<cpuid_maxphyaddr ()) -16 ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();vmcs_write (ENTER_MSR_LD_ADDR , (1ULL <<cpuid_maxphyaddr ()) -32 ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();vmcs_write (ENTER_MSR_LD_ADDR , (1ULL <<cpuid_maxphyaddr ()) -48 ); -test_vmx_valid_controls (false); +test_vmx_valid_controls (); }static void guest_state_test_main (void )
@@ -5088,7 +5086,7 @@ static void test_exit_msr_store(void)vmcs_write (EXIT_MSR_ST_ADDR , tmp);report_prefix_pushf ("VM-exit MSR-store addr [4:0] %lx" , tmp &0xf ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }
@@ -5110,16 +5108,16 @@ static void test_exit_msr_store(void)1ul << i;vmcs_write (EXIT_MSR_ST_ADDR , tmp - (exit_msr_st_cnt *16 -1 )); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls (); }vmcs_write (EXI_MSR_ST_CNT ,2 );vmcs_write (EXIT_MSR_ST_ADDR , (1ULL <<cpuid_maxphyaddr ()) -16 ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();vmcs_write (EXIT_MSR_ST_ADDR , (1ULL <<cpuid_maxphyaddr ()) -32 ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();vmcs_write (EXIT_MSR_ST_ADDR , (1ULL <<cpuid_maxphyaddr ()) -48 ); -test_vmx_valid_controls (false); +test_vmx_valid_controls (); }/*
@@ -6616,12 +6614,12 @@ static void test_sysenter_field(u32 field, const char *name)vmcs_write (field,NONCANONICAL );report_prefix_pushf ("%s non-canonical" , name); -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop ();vmcs_write (field,0xffffffff );report_prefix_pushf ("%s canonical" , name); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop ();vmcs_write (field, addr_saved);
@@ -6640,10 +6638,9 @@ static void test_ctl_reg(const char *cr_name, u64 cr, u64 fixed0, u64 fixed1)vmcs_write (cr, val);report_prefix_pushf ("%s %lx" , cr_name, val);if (val == fixed0) -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );else -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop ();for (i =0 ; i <64 ; i++) {
@@ -6658,8 +6655,7 @@ static void test_ctl_reg(const char *cr_name, u64 cr, u64 fixed0, u64 fixed1)report_prefix_pushf ("%s %llx" , cr_name, cr_saved | (1ull << i));test_vmx_vmlaunch ( -VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop (); }
@@ -6669,8 +6665,7 @@ static void test_ctl_reg(const char *cr_name, u64 cr, u64 fixed0, u64 fixed1)report_prefix_pushf ("%s %llx" , cr_name, cr_saved & ~(1ull << i));test_vmx_vmlaunch ( -VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop (); } }
@@ -6711,8 +6706,7 @@ static void test_host_ctl_regs(void) cr3 = cr3_saved | (1ul << i);vmcs_write (HOST_CR3 , cr3);report_prefix_pushf ("HOST_CR3 %lx" , cr3); -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop (); }
@@ -6733,14 +6727,14 @@ static void test_efer_bit(u32 fld, const char * fld_name, u32 ctrl_fld,vmcs_write (fld, efer);report_prefix_pushf ("%s bit turned off, %s %lx" , efer_bit_name, fld_name, efer); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); efer = efer_saved | efer_bit;vmcs_write (fld, efer);report_prefix_pushf ("%s bit turned on, %s %lx" , efer_bit_name, fld_name, efer); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop ();vmcs_write (ctrl_fld, ctrl_saved | ctrl_bit);
@@ -6749,10 +6743,9 @@ static void test_efer_bit(u32 fld, const char * fld_name, u32 ctrl_fld,report_prefix_pushf ("%s bit turned off, %s %lx" , efer_bit_name, fld_name, efer);if (host_addr_size) -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );else -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); efer = efer_saved | efer_bit;
@@ -6760,10 +6753,9 @@ static void test_efer_bit(u32 fld, const char * fld_name, u32 ctrl_fld,report_prefix_pushf ("%s bit turned on, %s %lx" , efer_bit_name, fld_name, efer);if (host_addr_size) -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );else -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop ();vmcs_write (ctrl_fld, ctrl_saved);
@@ -6791,7 +6783,7 @@ static void test_efer(u32 fld, const char * fld_name, u32 ctrl_fld, efer = efer_saved | (1ull << i);vmcs_write (fld, efer);report_prefix_pushf ("%s %lx" , fld_name, efer); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); } }
@@ -6803,8 +6795,7 @@ static void test_efer(u32 fld, const char * fld_name, u32 ctrl_fld,vmcs_write (fld, efer);report_prefix_pushf ("%s %lx" , fld_name, efer);test_vmx_vmlaunch ( -VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop (); } }
@@ -6868,7 +6859,7 @@ static void test_pat(u32 field, const char * field_name, u32 ctrl_field,vmcs_write (field, val);if (field ==HOST_PAT ) {report_prefix_pushf ("%s %lx" , field_name, val); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); }else {// GUEST_PAT
@@ -6895,7 +6886,7 @@ static void test_pat(u32 field, const char * field_name, u32 ctrl_field,else error =0 ; -test_vmx_vmlaunch (error, false); +test_vmx_vmlaunch (error);report_prefix_pop (); }else {// GUEST_PAT
@@ -6981,9 +6972,9 @@ static void test_vmcs_field(u64 field, const char *field_name, u32 bit_start,vmcs_write (field, tmp);report_prefix_pushf ("%s %lx" , field_name, tmp);if (valid_val) -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );else -test_vmx_vmlaunch (error, false); +test_vmx_vmlaunch (error);report_prefix_pop ();for (i = bit_start; i <= bit_end; i = i +2 ) {
@@ -6995,9 +6986,9 @@ static void test_vmcs_field(u64 field, const char *field_name, u32 bit_start,vmcs_write (field, tmp);report_prefix_pushf ("%s %lx" , field_name, tmp);if (valid_val) -test_vmx_vmlaunch (error, false); +test_vmx_vmlaunch (error);else -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); }
@@ -7011,19 +7002,17 @@ static void test_canonical(u64 field, const char * field_name)report_prefix_pushf ("%s %lx" , field_name, addr);if (is_canonical (addr)) { -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); addr =make_non_canonical (addr);vmcs_write (field, addr);report_prefix_pushf ("%s %lx" , field_name, addr); -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );vmcs_write (field, addr_saved); }else { -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD ); }report_prefix_pop (); }
@@ -7076,14 +7065,14 @@ static void test_host_segment_regs(void)vmcs_write (HOST_SEL_SS ,0 );if (exit_ctrl_saved &EXI_HOST_64 ) {report_prefix_pushf ("HOST_SEL_SS 0" ); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop ();vmcs_write (EXI_CONTROLS , exit_ctrl_saved & ~EXI_HOST_64 ); }report_prefix_pushf ("HOST_SEL_SS 0" ); -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop ();vmcs_write (HOST_SEL_SS , selector_saved);
Signature · 1 line
2.23.0.162.g0b9fbb3734-goog
Quoted 989 lines · Jim Mattson
We no longer have any tests in
vmx_tests.cthat usexfail_beyond_mapped_ram. However, an upcoming change to kvm will exit to userspace with a kvm internal error whenever launching a nested VM with the vmcs12 APIC-access address set to a non-cacheable address in L1. Reuse thexfail_beyond_mapped_ramplumbing to supportskip_beyond_mapped_ram, and skip any APIC-access address tests that use addresses beyond mapped RAM, so that the test won't induce a kvm internal error.Signed-off-by Jim Mattson <[email protected]>--- x86/vmx_tests.c | 289 +++++++++++++++++++++++------------------------- 1 file changed, 139 insertions(+), 150 deletions(-)x86/vmx_tests.c +139
-151@@ -3351,13 +3351,13 @@ success:/* * Try to launch the current VMCS. */ -static void test_vmx_vmlaunch (u32 xerror,bool xfail) +static void test_vmx_vmlaunch (u32 xerror) {bool success =vmlaunch_succeeds ();u32 vmx_inst_err; -report_xfail ("vmlaunch %s" , xfail, success == !xerror, - !xerror ?"succeeds" :"fails" ); +report ("vmlaunch %s" , success == !xerror, + !xerror ?"succeeds" :"fails" );if (!success && xerror) { vmx_inst_err =vmcs_read (VMX_INST_ERROR ); report("VMX inst error is %d (actual %d)",@@ -3365,14 +3365,14 @@ static void test_vmx_vmlaunch(u32 xerror, bool xfail) } } -static void test_vmx_invalid_controls (bool xfail) +static void test_vmx_invalid_controls (void ) { -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_CONTROL_FIELD , xfail); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_CONTROL_FIELD ); } -static void test_vmx_valid_controls (bool xfail) +static void test_vmx_valid_controls (void ) { -test_vmx_vmlaunch (0 , xfail); +test_vmx_vmlaunch (0 ); }/* @@ -3410,9 +3410,9 @@ static void test_rsvd_ctl_bit_value(const char *name, union vmx_ctrl_msr msr, expected = !(msr.set & mask); }if (expected) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();vmcs_write (encoding, controls);report_prefix_pop (); }@@ -3509,9 +3509,9 @@ static void try_cr3_target_count(unsigned i, unsigned max)report_prefix_pushf ("CR3 target count 0x%x" , i);vmcs_write (CR3_TARGET_COUNT , i);if (i <= max) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -3546,23 +3546,21 @@ static void test_vmcs_addr(const char *name,enum Encoding encoding, u64 align, bool ignored, - bool xfail_beyond_mapped_ram, + bool skip_beyond_mapped_ram, u64 addr) { - bool xfail = - (xfail_beyond_mapped_ram && - addr >fwcfg_get_u64 (FW_CFG_RAM_SIZE ) - align && - addr < (1ul <<cpuid_maxphyaddr ())); - report_prefix_pushf("%s = %lx", name, addr);vmcs_write (encoding, addr); -if (ignored || (IS_ALIGNED (addr, align) && +if (skip_beyond_mapped_ram && + addr >fwcfg_get_u64 (FW_CFG_RAM_SIZE ) - align && + addr < (1ul <<cpuid_maxphyaddr ())) +printf ("Skipping physical address beyond mapped RAM\n" ); +else if (ignored || (IS_ALIGNED (addr, align) && addr < (1ul <<cpuid_maxphyaddr ()))) -test_vmx_valid_controls (xfail); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (xfail); +test_vmx_invalid_controls ();report_prefix_pop (); - xfail = false; }/* @@ -3572,7 +3570,7 @@ static void test_vmcs_addr_values(const char *name,enum Encoding encoding, u64 align, bool ignored, - bool xfail_beyond_mapped_ram, + bool skip_beyond_mapped_ram, u32 bit_start, u32 bit_end) { unsigned i;@@ -3580,17 +3578,17 @@ static void test_vmcs_addr_values(const char *name,for (i = bit_start; i <= bit_end; i++)test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram,1ul << i); + skip_beyond_mapped_ram,1ul << i);test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram,PAGE_SIZE -1 ); + skip_beyond_mapped_ram,PAGE_SIZE -1 );test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram,PAGE_SIZE ); + skip_beyond_mapped_ram,PAGE_SIZE );test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram, + skip_beyond_mapped_ram, (1ul <<cpuid_maxphyaddr ()) -PAGE_SIZE );test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram,-1ul ); + skip_beyond_mapped_ram,-1ul );vmcs_write (encoding, orig_val); }@@ -3602,7 +3600,7 @@ static void test_vmcs_addr_values(const char *name,static void test_vmcs_addr_reference (u32 control_bit,enum Encoding field,const char *field_name,const char *control_name,u64 align, -bool xfail_beyond_mapped_ram, +bool skip_beyond_mapped_ram,bool control_primary) {u32 primary =vmcs_read (CPU_EXEC_CTRL0 );@@ -3628,7 +3626,7 @@ static void test_vmcs_addr_reference(u32 control_bit, enum Encoding field, }test_vmcs_addr_values (field_name, field, align, false, - xfail_beyond_mapped_ram,0 ,63 ); + skip_beyond_mapped_ram,0 ,63 );report_prefix_pop ();report_prefix_pushf ("%s disabled" , control_name);@@ -3716,7 +3714,7 @@ static void test_apic_access_addr(void)test_vmcs_addr_reference (CPU_VIRT_APIC_ACCESSES ,APIC_ACCS_ADDR ,"APIC-access address" ,"virtualize APIC-accesses" ,PAGE_SIZE , - false, false); + true, false); }static bool set_bit_pattern (u8 mask,u32 *secondary)@@ -3789,9 +3787,9 @@ static void test_apic_virtual_ctls(void)report_prefix_pushf ("Use TPR shadow %s, virtualize x2APIC mode %s, APIC-register virtualization %s, virtual-interrupt delivery %s" , str, (secondary &CPU_VIRT_X2APIC ) ?"enabled" :"disabled" , (secondary &CPU_APIC_REG_VIRT ) ?"enabled" :"disabled" , (secondary &CPU_VINTD ) ?"enabled" :"disabled" );if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -3818,22 +3816,22 @@ static void test_apic_virtual_ctls(void) secondary &= ~CPU_VIRT_APIC_ACCESSES ;vmcs_write (CPU_EXEC_CTRL1 , secondary & ~CPU_VIRT_X2APIC );report_prefix_pushf ("Virtualize x2APIC mode disabled; virtualize APIC access disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary |CPU_VIRT_APIC_ACCESSES );report_prefix_pushf ("Virtualize x2APIC mode disabled; virtualize APIC access enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary |CPU_VIRT_X2APIC );report_prefix_pushf ("Virtualize x2APIC mode enabled; virtualize APIC access enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary & ~CPU_VIRT_APIC_ACCESSES );report_prefix_pushf ("Virtualize x2APIC mode enabled; virtualize APIC access disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL0 , saved_primary);@@ -3862,22 +3860,22 @@ static void test_virtual_intr_ctls(void)vmcs_write (CPU_EXEC_CTRL1 , secondary & ~CPU_VINTD );vmcs_write (PIN_CONTROLS , pin & ~PIN_EXTINT );report_prefix_pushf ("Virtualize interrupt-delivery disabled; external-interrupt exiting disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary |CPU_VINTD );report_prefix_pushf ("Virtualize interrupt-delivery enabled; external-interrupt exiting disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , pin |PIN_EXTINT );report_prefix_pushf ("Virtualize interrupt-delivery enabled; external-interrupt exiting enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , pin & ~PIN_EXTINT );report_prefix_pushf ("Virtualize interrupt-delivery enabled; external-interrupt exiting disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL0 , saved_primary);@@ -3890,9 +3888,9 @@ static void test_pi_desc_addr(u64 addr, bool ctrl)vmcs_write (POSTED_INTR_DESC_ADDR , addr);report_prefix_pushf ("Process-posted-interrupts enabled; posted-interrupt-descriptor-address 0x%lx" , addr);if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -3937,37 +3935,37 @@ static void test_posted_intr(void) secondary &= ~CPU_VINTD ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); secondary |=CPU_VINTD ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); exit_ctl &= ~EXI_INTA ;vmcs_write (EXI_CONTROLS , exit_ctl);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery enabled; acknowledge-interrupt-on-exit disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); exit_ctl |=EXI_INTA ;vmcs_write (EXI_CONTROLS , exit_ctl);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery enabled; acknowledge-interrupt-on-exit enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); secondary &= ~CPU_VINTD ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery disabled; acknowledge-interrupt-on-exit enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); secondary |=CPU_VINTD ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery enabled; acknowledge-interrupt-on-exit enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/* @@ -3977,21 +3975,21 @@ static void test_posted_intr(void) vec = (1ul << i);vmcs_write (PINV , vec);report_prefix_pushf ("Process-posted-interrupts enabled; posted-interrupt-notification-vector %u" , vec); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); }for (i =8 ; i <16 ; i++) { vec = (1ul << i);vmcs_write (PINV , vec);report_prefix_pushf ("Process-posted-interrupts enabled; posted-interrupt-notification-vector %u" , vec); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); } vec &= ~(0xff <<8 );vmcs_write (PINV , vec);report_prefix_pushf ("Process-posted-interrupts enabled; posted-interrupt-notification-vector %u" , vec); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/* @@ -4048,19 +4046,19 @@ static void test_vpid(void)vmcs_write (CPU_EXEC_CTRL1 , saved_secondary & ~CPU_VPID );vmcs_write (VPID , vpid);report_prefix_pushf ("VPID disabled; VPID value %x" , vpid); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , saved_secondary |CPU_VPID );report_prefix_pushf ("VPID enabled; VPID value %x" , vpid); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();for (i =0 ; i <16 ; i++) { vpid = (short )1 << i;;vmcs_write (VPID , vpid);report_prefix_pushf ("VPID enabled; VPID value %x" , vpid); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); }@@ -4088,9 +4086,9 @@ static void try_tpr_threshold_and_vtpr(unsigned threshold, unsigned vtpr)report_prefix_pushf ("TPR threshold 0x%x, VTPR.class 0x%x" , threshold, (vtpr >>4 ) &0xf );if (valid) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -4117,7 +4115,7 @@ static void test_invalid_event_injection(void)"RESERVED interruption type invalid [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); ent_intr_info = ent_intr_info_base | INTR_TYPE_EXT_INTR |@@ -4126,7 +4124,7 @@ static void test_invalid_event_injection(void)"RESERVED interruption type invalid [+]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/* If the interruption type is other event, the vector is 0. */ @@ -4135,7 +4133,7 @@ static void test_invalid_event_injection(void)"(OTHER EVENT && vector != 0) invalid [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/* If the interruption type is NMI, the vector is 2 (negative case). */ @@ -4143,7 +4141,7 @@ static void test_invalid_event_injection(void)report_prefix_pushf ("%s, VM-entry intr info=0x%x" ,"(NMI && vector != 2) invalid [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/* If the interruption type is NMI, the vector is 2 (positive case). */ @@ -4151,7 +4149,7 @@ static void test_invalid_event_injection(void)report_prefix_pushf ("%s, VM-entry intr info=0x%x" ,"(NMI && vector == 2) valid [+]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/* @@ -4163,7 +4161,7 @@ static void test_invalid_event_injection(void)"(HW exception && vector > 31) invalid [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/* @@ -4183,7 +4181,7 @@ static void test_invalid_event_injection(void) ent_intr_info);vmcs_write (GUEST_CR0 , guest_cr0_save & ~X86_CR0_PE & ~X86_CR0_PG );vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); ent_intr_info = ent_intr_info_base | INTR_INFO_DELIVER_CODE_MASK |@@ -4193,7 +4191,7 @@ static void test_invalid_event_injection(void) ent_intr_info);vmcs_write (GUEST_CR0 , guest_cr0_save & ~X86_CR0_PE & ~X86_CR0_PG );vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();if (enable_unrestricted_guest ())@@ -4206,7 +4204,7 @@ static void test_invalid_event_injection(void) ent_intr_info);vmcs_write (GUEST_CR0 , guest_cr0_save & ~X86_CR0_PE & ~X86_CR0_PG );vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); ent_intr_info = ent_intr_info_base | INTR_TYPE_HARD_EXCEPTION |@@ -4216,7 +4214,7 @@ static void test_invalid_event_injection(void) ent_intr_info);vmcs_write (GUEST_CR0 , guest_cr0_save |X86_CR0_PE );vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary_save);@@ -4238,7 +4236,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr info=0x%x [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }report_prefix_pop ();@@ -4272,7 +4270,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr info=0x%x [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/* Positive case */ @@ -4284,7 +4282,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr info=0x%x [+]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); }report_prefix_pop ();@@ -4299,7 +4297,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr info=0x%x [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }report_prefix_pop ();@@ -4319,7 +4317,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr error=0x%x [-]" , ent_intr_err);vmcs_write (ENT_INTR_ERROR , ent_intr_err); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }vmcs_write (ENT_INTR_ERROR ,0x00000000 );@@ -4356,7 +4354,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr length = 0x%x [-]" , ent_intr_len);vmcs_write (ENT_INST_LEN , ent_intr_len); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/* Instruction length set to 16 should fail */ @@ -4364,7 +4362,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr length = 0x%x [-]" , ent_intr_len);vmcs_write (ENT_INST_LEN ,0x00000010 ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();report_prefix_pop ();@@ -4405,9 +4403,9 @@ static void try_tpr_threshold(unsigned threshold)vmcs_write (TPR_THRESHOLD , threshold);report_prefix_pushf ("TPR threshold 0x%x, VTPR.class 0xf" , threshold);if (valid) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();if (valid)@@ -4557,22 +4555,22 @@ static void test_nmi_ctrls(void)vmcs_write (PIN_CONTROLS , test_pin_ctrls);report_prefix_pushf ("NMI-exiting disabled, virtual-NMIs disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls |PIN_VIRT_NMI );report_prefix_pushf ("NMI-exiting disabled, virtual-NMIs enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls | (PIN_NMI |PIN_VIRT_NMI ));report_prefix_pushf ("NMI-exiting enabled, virtual-NMIs enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls |PIN_NMI );report_prefix_pushf ("NMI-exiting enabled, virtual-NMIs disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();if (!(ctrl_cpu_rev[0 ].clr &CPU_NMI_WINDOW )) {@@ -4583,25 +4581,25 @@ static void test_nmi_ctrls(void)vmcs_write (PIN_CONTROLS , test_pin_ctrls);vmcs_write (CPU_EXEC_CTRL0 , test_cpu_ctrls0 |CPU_NMI_WINDOW );report_prefix_pushf ("Virtual-NMIs disabled, NMI-window-exiting enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls);vmcs_write (CPU_EXEC_CTRL0 , test_cpu_ctrls0);report_prefix_pushf ("Virtual-NMIs disabled, NMI-window-exiting disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls | (PIN_NMI |PIN_VIRT_NMI ));vmcs_write (CPU_EXEC_CTRL0 , test_cpu_ctrls0 |CPU_NMI_WINDOW );report_prefix_pushf ("Virtual-NMIs enabled, NMI-window-exiting enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls | (PIN_NMI |PIN_VIRT_NMI ));vmcs_write (CPU_EXEC_CTRL0 , test_cpu_ctrls0);report_prefix_pushf ("Virtual-NMIs enabled, NMI-window-exiting disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/* Restore the controls to their original values */ @@ -4616,9 +4614,9 @@ static void test_eptp_ad_bit(u64 eptp, bool ctrl)report_prefix_pushf ("Enable-EPT enabled; EPT accessed and dirty flag %s" , (eptp &EPTP_AD_FLAG ) ?"1" :"0" );if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -4702,9 +4700,9 @@ static void test_ept_eptp(void)report_prefix_pushf ("Enable-EPT enabled; EPT memory type %lu" , eptp &EPT_MEM_TYPE_MASK );if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -4725,9 +4723,9 @@ static void test_ept_eptp(void)report_prefix_pushf ("Enable-EPT enabled; EPT page walk length %lu" , eptp &EPTP_PG_WALK_LEN_MASK );if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -4765,9 +4763,9 @@ static void test_ept_eptp(void) (eptp >>EPTP_RESERV_BITS_SHIFT ) & EPTP_RESERV_BITS_MASK);if (i ==0 ) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -4785,16 +4783,16 @@ static void test_ept_eptp(void)report_prefix_pushf ("Enable-EPT enabled; reserved bits [63:N] %lu" , (eptp >> maxphysaddr) & resv_bits_mask);if (j < maxphysaddr) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); } secondary &= ~(CPU_EPT |CPU_URG );vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Enable-EPT disabled, unrestricted-guest disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();if (!(ctrl_cpu_rev[1 ].clr &CPU_URG ))@@ -4803,20 +4801,20 @@ static void test_ept_eptp(void) secondary |=CPU_URG ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Enable-EPT disabled, unrestricted-guest enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); secondary |=CPU_EPT ;setup_dummy_ept ();report_prefix_pushf ("Enable-EPT enabled, unrestricted-guest enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); skip_unrestricted_guest: secondary &= ~CPU_URG ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Enable-EPT enabled, unrestricted-guest disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL0 , primary_saved);@@ -4853,25 +4851,25 @@ static void test_pml(void) secondary &= ~(CPU_PML |CPU_EPT );vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("enable-PML disabled, enable-EPT disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); secondary |=CPU_PML ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("enable-PML enabled, enable-EPT disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); secondary |=CPU_EPT ;setup_dummy_ept ();report_prefix_pushf ("enable-PML enabled, enable-EPT enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); secondary &= ~CPU_PML ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("enable-PML disabled, enable EPT enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); test_vmcs_addr_reference(CPU_PML, PMLADDR, "PML address", "PML",@@ -4905,25 +4903,25 @@ static void test_vmx_preemption_timer(void) exit &= ~EXI_SAVE_PREEMPT ;vmcs_write (EXI_CONTROLS , exit);report_prefix_pushf ("enable-VMX-preemption-timer enabled, save-VMX-preemption-timer disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); exit |=EXI_SAVE_PREEMPT ;vmcs_write (EXI_CONTROLS , exit);report_prefix_pushf ("enable-VMX-preemption-timer enabled, save-VMX-preemption-timer enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); pin &= ~PIN_PREEMPT ;vmcs_write (PIN_CONTROLS , pin);report_prefix_pushf ("enable-VMX-preemption-timer disabled, save-VMX-preemption-timer enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); exit &= ~EXI_SAVE_PREEMPT ;vmcs_write (EXI_CONTROLS , exit);report_prefix_pushf ("enable-VMX-preemption-timer disabled, save-VMX-preemption-timer disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , saved_pin);@@ -4983,7 +4981,7 @@ static void test_entry_msr_load(void)vmcs_write (ENTER_MSR_LD_ADDR , tmp);report_prefix_pushf ("VM-entry MSR-load addr [4:0] %lx" , tmp &0xf ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -5005,16 +5003,16 @@ static void test_entry_msr_load(void)1ul << i;vmcs_write (ENTER_MSR_LD_ADDR , tmp - (entry_msr_ld_cnt *16 -1 )); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls (); }vmcs_write (ENT_MSR_LD_CNT ,2 );vmcs_write (ENTER_MSR_LD_ADDR , (1ULL <<cpuid_maxphyaddr ()) -16 ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();vmcs_write (ENTER_MSR_LD_ADDR , (1ULL <<cpuid_maxphyaddr ()) -32 ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();vmcs_write (ENTER_MSR_LD_ADDR , (1ULL <<cpuid_maxphyaddr ()) -48 ); -test_vmx_valid_controls (false); +test_vmx_valid_controls (); }static void guest_state_test_main (void )@@ -5088,7 +5086,7 @@ static void test_exit_msr_store(void)vmcs_write (EXIT_MSR_ST_ADDR , tmp);report_prefix_pushf ("VM-exit MSR-store addr [4:0] %lx" , tmp &0xf ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -5110,16 +5108,16 @@ static void test_exit_msr_store(void)1ul << i;vmcs_write (EXIT_MSR_ST_ADDR , tmp - (exit_msr_st_cnt *16 -1 )); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls (); }vmcs_write (EXI_MSR_ST_CNT ,2 );vmcs_write (EXIT_MSR_ST_ADDR , (1ULL <<cpuid_maxphyaddr ()) -16 ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();vmcs_write (EXIT_MSR_ST_ADDR , (1ULL <<cpuid_maxphyaddr ()) -32 ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();vmcs_write (EXIT_MSR_ST_ADDR , (1ULL <<cpuid_maxphyaddr ()) -48 ); -test_vmx_valid_controls (false); +test_vmx_valid_controls (); }/* @@ -6616,12 +6614,12 @@ static void test_sysenter_field(u32 field, const char *name)vmcs_write (field,NONCANONICAL );report_prefix_pushf ("%s non-canonical" , name); -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop ();vmcs_write (field,0xffffffff );report_prefix_pushf ("%s canonical" , name); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop ();vmcs_write (field, addr_saved);@@ -6640,10 +6638,9 @@ static void test_ctl_reg(const char *cr_name, u64 cr, u64 fixed0, u64 fixed1)vmcs_write (cr, val);report_prefix_pushf ("%s %lx" , cr_name, val);if (val == fixed0) -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );else -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop ();for (i =0 ; i <64 ; i++) {@@ -6658,8 +6655,7 @@ static void test_ctl_reg(const char *cr_name, u64 cr, u64 fixed0, u64 fixed1)report_prefix_pushf ("%s %llx" , cr_name, cr_saved | (1ull << i));test_vmx_vmlaunch ( -VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop (); }@@ -6669,8 +6665,7 @@ static void test_ctl_reg(const char *cr_name, u64 cr, u64 fixed0, u64 fixed1)report_prefix_pushf ("%s %llx" , cr_name, cr_saved & ~(1ull << i));test_vmx_vmlaunch ( -VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop (); } }@@ -6711,8 +6706,7 @@ static void test_host_ctl_regs(void) cr3 = cr3_saved | (1ul << i);vmcs_write (HOST_CR3 , cr3);report_prefix_pushf ("HOST_CR3 %lx" , cr3); -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop (); }@@ -6733,14 +6727,14 @@ static void test_efer_bit(u32 fld, const char * fld_name, u32 ctrl_fld,vmcs_write (fld, efer);report_prefix_pushf ("%s bit turned off, %s %lx" , efer_bit_name, fld_name, efer); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); efer = efer_saved | efer_bit;vmcs_write (fld, efer);report_prefix_pushf ("%s bit turned on, %s %lx" , efer_bit_name, fld_name, efer); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop ();vmcs_write (ctrl_fld, ctrl_saved | ctrl_bit);@@ -6749,10 +6743,9 @@ static void test_efer_bit(u32 fld, const char * fld_name, u32 ctrl_fld,report_prefix_pushf ("%s bit turned off, %s %lx" , efer_bit_name, fld_name, efer);if (host_addr_size) -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );else -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); efer = efer_saved | efer_bit;@@ -6760,10 +6753,9 @@ static void test_efer_bit(u32 fld, const char * fld_name, u32 ctrl_fld,report_prefix_pushf ("%s bit turned on, %s %lx" , efer_bit_name, fld_name, efer);if (host_addr_size) -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );else -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop ();vmcs_write (ctrl_fld, ctrl_saved);@@ -6791,7 +6783,7 @@ static void test_efer(u32 fld, const char * fld_name, u32 ctrl_fld, efer = efer_saved | (1ull << i);vmcs_write (fld, efer);report_prefix_pushf ("%s %lx" , fld_name, efer); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); } }@@ -6803,8 +6795,7 @@ static void test_efer(u32 fld, const char * fld_name, u32 ctrl_fld,vmcs_write (fld, efer);report_prefix_pushf ("%s %lx" , fld_name, efer);test_vmx_vmlaunch ( -VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop (); } }@@ -6868,7 +6859,7 @@ static void test_pat(u32 field, const char * field_name, u32 ctrl_field,vmcs_write (field, val);if (field ==HOST_PAT ) {report_prefix_pushf ("%s %lx" , field_name, val); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); }else {// GUEST_PAT @@ -6895,7 +6886,7 @@ static void test_pat(u32 field, const char * field_name, u32 ctrl_field,else error =0 ; -test_vmx_vmlaunch (error, false); +test_vmx_vmlaunch (error);report_prefix_pop (); }else {// GUEST_PAT @@ -6981,9 +6972,9 @@ static void test_vmcs_field(u64 field, const char *field_name, u32 bit_start,vmcs_write (field, tmp);report_prefix_pushf ("%s %lx" , field_name, tmp);if (valid_val) -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );else -test_vmx_vmlaunch (error, false); +test_vmx_vmlaunch (error);report_prefix_pop ();for (i = bit_start; i <= bit_end; i = i +2 ) {@@ -6995,9 +6986,9 @@ static void test_vmcs_field(u64 field, const char *field_name, u32 bit_start,vmcs_write (field, tmp);report_prefix_pushf ("%s %lx" , field_name, tmp);if (valid_val) -test_vmx_vmlaunch (error, false); +test_vmx_vmlaunch (error);else -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); }@@ -7011,19 +7002,17 @@ static void test_canonical(u64 field, const char * field_name)report_prefix_pushf ("%s %lx" , field_name, addr);if (is_canonical (addr)) { -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); addr =make_non_canonical (addr);vmcs_write (field, addr);report_prefix_pushf ("%s %lx" , field_name, addr); -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );vmcs_write (field, addr_saved); }else { -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD ); }report_prefix_pop (); }@@ -7076,14 +7065,14 @@ static void test_host_segment_regs(void)vmcs_write (HOST_SEL_SS ,0 );if (exit_ctrl_saved &EXI_HOST_64 ) {report_prefix_pushf ("HOST_SEL_SS 0" ); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop ();vmcs_write (EXI_CONTROLS , exit_ctrl_saved & ~EXI_HOST_64 ); }report_prefix_pushf ("HOST_SEL_SS 0" ); -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop ();vmcs_write (HOST_SEL_SS , selector_saved); --
Quoted 2 lines
2.23.0.162.g0b9fbb3734-goog
Note that this change (or something like it) will be necessary to avoid KVM internal errors if my patch, "KVM: nVMX: Don't leak L1 MMIO regions to L2," is accepted.
Quoted 978 lines · Jim Mattson
We no longer have any tests in
vmx_tests.cthat usexfail_beyond_mapped_ram. However, an upcoming change to kvm will exit to userspace with a kvm internal error whenever launching a nested VM with the vmcs12 APIC-access address set to a non-cacheable address in L1. Reuse thexfail_beyond_mapped_ramplumbing to supportskip_beyond_mapped_ram, and skip any APIC-access address tests that use addresses beyond mapped RAM, so that the test won't induce a kvm internal error.Signed-off-by Jim Mattson <[email protected]>--- x86/vmx_tests.c | 289 +++++++++++++++++++++++------------------------- 1 file changed, 139 insertions(+), 150 deletions(-)x86/vmx_tests.c +138
-149@@ -3351,13 +3351,13 @@ success:/* * Try to launch the current VMCS. */ -static void test_vmx_vmlaunch (u32 xerror,bool xfail) +static void test_vmx_vmlaunch (u32 xerror) {bool success =vmlaunch_succeeds ();u32 vmx_inst_err; -report_xfail ("vmlaunch %s" , xfail, success == !xerror, - !xerror ?"succeeds" :"fails" ); +report ("vmlaunch %s" , success == !xerror, + !xerror ?"succeeds" :"fails" );if (!success && xerror) { vmx_inst_err =vmcs_read (VMX_INST_ERROR ); report("VMX inst error is %d (actual %d)",@@ -3365,14 +3365,14 @@ static void test_vmx_vmlaunch(u32 xerror, bool xfail) } } -static void test_vmx_invalid_controls (bool xfail) +static void test_vmx_invalid_controls (void ) { -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_CONTROL_FIELD , xfail); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_CONTROL_FIELD ); } -static void test_vmx_valid_controls (bool xfail) +static void test_vmx_valid_controls (void ) { -test_vmx_vmlaunch (0 , xfail); +test_vmx_vmlaunch (0 ); }/* @@ -3410,9 +3410,9 @@ static void test_rsvd_ctl_bit_value(const char *name, union vmx_ctrl_msr msr, expected = !(msr.set & mask); }if (expected) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();vmcs_write (encoding, controls);report_prefix_pop (); }@@ -3509,9 +3509,9 @@ static void try_cr3_target_count(unsigned i, unsigned max)report_prefix_pushf ("CR3 target count 0x%x" , i);vmcs_write (CR3_TARGET_COUNT , i);if (i <= max) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -3546,23 +3546,21 @@ static void test_vmcs_addr(const char *name,enum Encoding encoding, u64 align, bool ignored, - bool xfail_beyond_mapped_ram, + bool skip_beyond_mapped_ram, u64 addr) { - bool xfail = - (xfail_beyond_mapped_ram && - addr >fwcfg_get_u64 (FW_CFG_RAM_SIZE ) - align && - addr < (1ul <<cpuid_maxphyaddr ())); - report_prefix_pushf("%s = %lx", name, addr);vmcs_write (encoding, addr); -if (ignored || (IS_ALIGNED (addr, align) && +if (skip_beyond_mapped_ram && + addr >fwcfg_get_u64 (FW_CFG_RAM_SIZE ) - align && + addr < (1ul <<cpuid_maxphyaddr ())) +printf ("Skipping physical address beyond mapped RAM\n" ); +else if (ignored || (IS_ALIGNED (addr, align) && addr < (1ul <<cpuid_maxphyaddr ()))) -test_vmx_valid_controls (xfail); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (xfail); +test_vmx_invalid_controls ();report_prefix_pop (); - xfail = false; }/* @@ -3572,7 +3570,7 @@ static void test_vmcs_addr_values(const char *name,enum Encoding encoding, u64 align, bool ignored, - bool xfail_beyond_mapped_ram, + bool skip_beyond_mapped_ram, u32 bit_start, u32 bit_end) { unsigned i;@@ -3580,17 +3578,17 @@ static void test_vmcs_addr_values(const char *name,for (i = bit_start; i <= bit_end; i++)test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram,1ul << i); + skip_beyond_mapped_ram,1ul << i);test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram,PAGE_SIZE -1 ); + skip_beyond_mapped_ram,PAGE_SIZE -1 );test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram,PAGE_SIZE ); + skip_beyond_mapped_ram,PAGE_SIZE );test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram, + skip_beyond_mapped_ram, (1ul <<cpuid_maxphyaddr ()) -PAGE_SIZE );test_vmcs_addr (name, encoding, align, ignored, - xfail_beyond_mapped_ram,-1ul ); + skip_beyond_mapped_ram,-1ul );vmcs_write (encoding, orig_val); }@@ -3602,7 +3600,7 @@ static void test_vmcs_addr_values(const char *name,static void test_vmcs_addr_reference (u32 control_bit,enum Encoding field,const char *field_name,const char *control_name,u64 align, -bool xfail_beyond_mapped_ram, +bool skip_beyond_mapped_ram,bool control_primary) {u32 primary =vmcs_read (CPU_EXEC_CTRL0 );@@ -3628,7 +3626,7 @@ static void test_vmcs_addr_reference(u32 control_bit, enum Encoding field, }test_vmcs_addr_values (field_name, field, align, false, - xfail_beyond_mapped_ram,0 ,63 ); + skip_beyond_mapped_ram,0 ,63 );report_prefix_pop ();report_prefix_pushf ("%s disabled" , control_name);@@ -3716,7 +3714,7 @@ static void test_apic_access_addr(void)test_vmcs_addr_reference (CPU_VIRT_APIC_ACCESSES ,APIC_ACCS_ADDR ,"APIC-access address" ,"virtualize APIC-accesses" ,PAGE_SIZE , - false, false); + true, false); }static bool set_bit_pattern (u8 mask,u32 *secondary)@@ -3789,9 +3787,9 @@ static void test_apic_virtual_ctls(void)report_prefix_pushf ("Use TPR shadow %s, virtualize x2APIC mode %s, APIC-register virtualization %s, virtual-interrupt delivery %s" , str, (secondary &CPU_VIRT_X2APIC ) ?"enabled" :"disabled" , (secondary &CPU_APIC_REG_VIRT ) ?"enabled" :"disabled" , (secondary &CPU_VINTD ) ?"enabled" :"disabled" );if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -3818,22 +3816,22 @@ static void test_apic_virtual_ctls(void) secondary &= ~CPU_VIRT_APIC_ACCESSES ;vmcs_write (CPU_EXEC_CTRL1 , secondary & ~CPU_VIRT_X2APIC );report_prefix_pushf ("Virtualize x2APIC mode disabled; virtualize APIC access disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary |CPU_VIRT_APIC_ACCESSES );report_prefix_pushf ("Virtualize x2APIC mode disabled; virtualize APIC access enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary |CPU_VIRT_X2APIC );report_prefix_pushf ("Virtualize x2APIC mode enabled; virtualize APIC access enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary & ~CPU_VIRT_APIC_ACCESSES );report_prefix_pushf ("Virtualize x2APIC mode enabled; virtualize APIC access disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL0 , saved_primary);@@ -3862,22 +3860,22 @@ static void test_virtual_intr_ctls(void)vmcs_write (CPU_EXEC_CTRL1 , secondary & ~CPU_VINTD );vmcs_write (PIN_CONTROLS , pin & ~PIN_EXTINT );report_prefix_pushf ("Virtualize interrupt-delivery disabled; external-interrupt exiting disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary |CPU_VINTD );report_prefix_pushf ("Virtualize interrupt-delivery enabled; external-interrupt exiting disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , pin |PIN_EXTINT );report_prefix_pushf ("Virtualize interrupt-delivery enabled; external-interrupt exiting enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , pin & ~PIN_EXTINT );report_prefix_pushf ("Virtualize interrupt-delivery enabled; external-interrupt exiting disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL0 , saved_primary);@@ -3890,9 +3888,9 @@ static void test_pi_desc_addr(u64 addr, bool ctrl)vmcs_write (POSTED_INTR_DESC_ADDR , addr);report_prefix_pushf ("Process-posted-interrupts enabled; posted-interrupt-descriptor-address 0x%lx" , addr);if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -3937,37 +3935,37 @@ static void test_posted_intr(void) secondary &= ~CPU_VINTD ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); secondary |=CPU_VINTD ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); exit_ctl &= ~EXI_INTA ;vmcs_write (EXI_CONTROLS , exit_ctl);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery enabled; acknowledge-interrupt-on-exit disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); exit_ctl |=EXI_INTA ;vmcs_write (EXI_CONTROLS , exit_ctl);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery enabled; acknowledge-interrupt-on-exit enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); secondary &= ~CPU_VINTD ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery disabled; acknowledge-interrupt-on-exit enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); secondary |=CPU_VINTD ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Process-posted-interrupts enabled; virtual-interrupt-delivery enabled; acknowledge-interrupt-on-exit enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/* @@ -3977,21 +3975,21 @@ static void test_posted_intr(void) vec = (1ul << i);vmcs_write (PINV , vec);report_prefix_pushf ("Process-posted-interrupts enabled; posted-interrupt-notification-vector %u" , vec); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); }for (i =8 ; i <16 ; i++) { vec = (1ul << i);vmcs_write (PINV , vec);report_prefix_pushf ("Process-posted-interrupts enabled; posted-interrupt-notification-vector %u" , vec); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); } vec &= ~(0xff <<8 );vmcs_write (PINV , vec);report_prefix_pushf ("Process-posted-interrupts enabled; posted-interrupt-notification-vector %u" , vec); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/* @@ -4048,19 +4046,19 @@ static void test_vpid(void)vmcs_write (CPU_EXEC_CTRL1 , saved_secondary & ~CPU_VPID );vmcs_write (VPID , vpid);report_prefix_pushf ("VPID disabled; VPID value %x" , vpid); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , saved_secondary |CPU_VPID );report_prefix_pushf ("VPID enabled; VPID value %x" , vpid); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();for (i =0 ; i <16 ; i++) { vpid = (short )1 << i;;vmcs_write (VPID , vpid);report_prefix_pushf ("VPID enabled; VPID value %x" , vpid); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); }@@ -4088,9 +4086,9 @@ static void try_tpr_threshold_and_vtpr(unsigned threshold, unsigned vtpr)report_prefix_pushf ("TPR threshold 0x%x, VTPR.class 0x%x" , threshold, (vtpr >>4 ) &0xf );if (valid) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -4117,7 +4115,7 @@ static void test_invalid_event_injection(void)"RESERVED interruption type invalid [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); ent_intr_info = ent_intr_info_base | INTR_TYPE_EXT_INTR |@@ -4126,7 +4124,7 @@ static void test_invalid_event_injection(void)"RESERVED interruption type invalid [+]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/* If the interruption type is other event, the vector is 0. */ @@ -4135,7 +4133,7 @@ static void test_invalid_event_injection(void)"(OTHER EVENT && vector != 0) invalid [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/* If the interruption type is NMI, the vector is 2 (negative case). */ @@ -4143,7 +4141,7 @@ static void test_invalid_event_injection(void)report_prefix_pushf ("%s, VM-entry intr info=0x%x" ,"(NMI && vector != 2) invalid [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/* If the interruption type is NMI, the vector is 2 (positive case). */ @@ -4151,7 +4149,7 @@ static void test_invalid_event_injection(void)report_prefix_pushf ("%s, VM-entry intr info=0x%x" ,"(NMI && vector == 2) valid [+]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/* @@ -4163,7 +4161,7 @@ static void test_invalid_event_injection(void)"(HW exception && vector > 31) invalid [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/* @@ -4183,7 +4181,7 @@ static void test_invalid_event_injection(void) ent_intr_info);vmcs_write (GUEST_CR0 , guest_cr0_save & ~X86_CR0_PE & ~X86_CR0_PG );vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); ent_intr_info = ent_intr_info_base | INTR_INFO_DELIVER_CODE_MASK |@@ -4193,7 +4191,7 @@ static void test_invalid_event_injection(void) ent_intr_info);vmcs_write (GUEST_CR0 , guest_cr0_save & ~X86_CR0_PE & ~X86_CR0_PG );vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();if (enable_unrestricted_guest ())@@ -4206,7 +4204,7 @@ static void test_invalid_event_injection(void) ent_intr_info);vmcs_write (GUEST_CR0 , guest_cr0_save & ~X86_CR0_PE & ~X86_CR0_PG );vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); ent_intr_info = ent_intr_info_base | INTR_TYPE_HARD_EXCEPTION |@@ -4216,7 +4214,7 @@ static void test_invalid_event_injection(void) ent_intr_info);vmcs_write (GUEST_CR0 , guest_cr0_save |X86_CR0_PE );vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL1 , secondary_save);@@ -4238,7 +4236,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr info=0x%x [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }report_prefix_pop ();@@ -4272,7 +4270,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr info=0x%x [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/* Positive case */ @@ -4284,7 +4282,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr info=0x%x [+]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); }report_prefix_pop ();@@ -4299,7 +4297,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr info=0x%x [-]" , ent_intr_info);vmcs_write (ENT_INTR_INFO , ent_intr_info); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }report_prefix_pop ();@@ -4319,7 +4317,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr error=0x%x [-]" , ent_intr_err);vmcs_write (ENT_INTR_ERROR , ent_intr_err); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }vmcs_write (ENT_INTR_ERROR ,0x00000000 );@@ -4356,7 +4354,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr length = 0x%x [-]" , ent_intr_len);vmcs_write (ENT_INST_LEN , ent_intr_len); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();/* Instruction length set to 16 should fail */ @@ -4364,7 +4362,7 @@ skip_unrestricted_guest:report_prefix_pushf ("VM-entry intr length = 0x%x [-]" , ent_intr_len);vmcs_write (ENT_INST_LEN ,0x00000010 ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();report_prefix_pop ();@@ -4405,9 +4403,9 @@ static void try_tpr_threshold(unsigned threshold)vmcs_write (TPR_THRESHOLD , threshold);report_prefix_pushf ("TPR threshold 0x%x, VTPR.class 0xf" , threshold);if (valid) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();if (valid)@@ -4557,22 +4555,22 @@ static void test_nmi_ctrls(void)vmcs_write (PIN_CONTROLS , test_pin_ctrls);report_prefix_pushf ("NMI-exiting disabled, virtual-NMIs disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls |PIN_VIRT_NMI );report_prefix_pushf ("NMI-exiting disabled, virtual-NMIs enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls | (PIN_NMI |PIN_VIRT_NMI ));report_prefix_pushf ("NMI-exiting enabled, virtual-NMIs enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls |PIN_NMI );report_prefix_pushf ("NMI-exiting enabled, virtual-NMIs disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();if (!(ctrl_cpu_rev[0 ].clr &CPU_NMI_WINDOW )) {@@ -4583,25 +4581,25 @@ static void test_nmi_ctrls(void)vmcs_write (PIN_CONTROLS , test_pin_ctrls);vmcs_write (CPU_EXEC_CTRL0 , test_cpu_ctrls0 |CPU_NMI_WINDOW );report_prefix_pushf ("Virtual-NMIs disabled, NMI-window-exiting enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls);vmcs_write (CPU_EXEC_CTRL0 , test_cpu_ctrls0);report_prefix_pushf ("Virtual-NMIs disabled, NMI-window-exiting disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls | (PIN_NMI |PIN_VIRT_NMI ));vmcs_write (CPU_EXEC_CTRL0 , test_cpu_ctrls0 |CPU_NMI_WINDOW );report_prefix_pushf ("Virtual-NMIs enabled, NMI-window-exiting enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , test_pin_ctrls | (PIN_NMI |PIN_VIRT_NMI ));vmcs_write (CPU_EXEC_CTRL0 , test_cpu_ctrls0);report_prefix_pushf ("Virtual-NMIs enabled, NMI-window-exiting disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();/* Restore the controls to their original values */ @@ -4616,9 +4614,9 @@ static void test_eptp_ad_bit(u64 eptp, bool ctrl)report_prefix_pushf ("Enable-EPT enabled; EPT accessed and dirty flag %s" , (eptp &EPTP_AD_FLAG ) ?"1" :"0" );if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -4702,9 +4700,9 @@ static void test_ept_eptp(void)report_prefix_pushf ("Enable-EPT enabled; EPT memory type %lu" , eptp &EPT_MEM_TYPE_MASK );if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -4725,9 +4723,9 @@ static void test_ept_eptp(void)report_prefix_pushf ("Enable-EPT enabled; EPT page walk length %lu" , eptp &EPTP_PG_WALK_LEN_MASK );if (ctrl) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -4765,9 +4763,9 @@ static void test_ept_eptp(void) (eptp >>EPTP_RESERV_BITS_SHIFT ) & EPTP_RESERV_BITS_MASK);if (i ==0 ) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -4785,16 +4783,16 @@ static void test_ept_eptp(void)report_prefix_pushf ("Enable-EPT enabled; reserved bits [63:N] %lu" , (eptp >> maxphysaddr) & resv_bits_mask);if (j < maxphysaddr) -test_vmx_valid_controls (false); +test_vmx_valid_controls ();else -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); } secondary &= ~(CPU_EPT |CPU_URG );vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Enable-EPT disabled, unrestricted-guest disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();if (!(ctrl_cpu_rev[1 ].clr &CPU_URG ))@@ -4803,20 +4801,20 @@ static void test_ept_eptp(void) secondary |=CPU_URG ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Enable-EPT disabled, unrestricted-guest enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); secondary |=CPU_EPT ;setup_dummy_ept ();report_prefix_pushf ("Enable-EPT enabled, unrestricted-guest enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); skip_unrestricted_guest: secondary &= ~CPU_URG ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("Enable-EPT enabled, unrestricted-guest disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (CPU_EXEC_CTRL0 , primary_saved);@@ -4853,25 +4851,25 @@ static void test_pml(void) secondary &= ~(CPU_PML |CPU_EPT );vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("enable-PML disabled, enable-EPT disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); secondary |=CPU_PML ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("enable-PML enabled, enable-EPT disabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); secondary |=CPU_EPT ;setup_dummy_ept ();report_prefix_pushf ("enable-PML enabled, enable-EPT enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); secondary &= ~CPU_PML ;vmcs_write (CPU_EXEC_CTRL1 , secondary);report_prefix_pushf ("enable-PML disabled, enable EPT enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); test_vmcs_addr_reference(CPU_PML, PMLADDR, "PML address", "PML",@@ -4905,25 +4903,25 @@ static void test_vmx_preemption_timer(void) exit &= ~EXI_SAVE_PREEMPT ;vmcs_write (EXI_CONTROLS , exit);report_prefix_pushf ("enable-VMX-preemption-timer enabled, save-VMX-preemption-timer disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); exit |=EXI_SAVE_PREEMPT ;vmcs_write (EXI_CONTROLS , exit);report_prefix_pushf ("enable-VMX-preemption-timer enabled, save-VMX-preemption-timer enabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop (); pin &= ~PIN_PREEMPT ;vmcs_write (PIN_CONTROLS , pin);report_prefix_pushf ("enable-VMX-preemption-timer disabled, save-VMX-preemption-timer enabled" ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); exit &= ~EXI_SAVE_PREEMPT ;vmcs_write (EXI_CONTROLS , exit);report_prefix_pushf ("enable-VMX-preemption-timer disabled, save-VMX-preemption-timer disabled" ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();report_prefix_pop ();vmcs_write (PIN_CONTROLS , saved_pin);@@ -4983,7 +4981,7 @@ static void test_entry_msr_load(void)vmcs_write (ENTER_MSR_LD_ADDR , tmp);report_prefix_pushf ("VM-entry MSR-load addr [4:0] %lx" , tmp &0xf ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -5005,16 +5003,16 @@ static void test_entry_msr_load(void)1ul << i;vmcs_write (ENTER_MSR_LD_ADDR , tmp - (entry_msr_ld_cnt *16 -1 )); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls (); }vmcs_write (ENT_MSR_LD_CNT ,2 );vmcs_write (ENTER_MSR_LD_ADDR , (1ULL <<cpuid_maxphyaddr ()) -16 ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();vmcs_write (ENTER_MSR_LD_ADDR , (1ULL <<cpuid_maxphyaddr ()) -32 ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();vmcs_write (ENTER_MSR_LD_ADDR , (1ULL <<cpuid_maxphyaddr ()) -48 ); -test_vmx_valid_controls (false); +test_vmx_valid_controls (); }static void guest_state_test_main (void )@@ -5088,7 +5086,7 @@ static void test_exit_msr_store(void)vmcs_write (EXIT_MSR_ST_ADDR , tmp);report_prefix_pushf ("VM-exit MSR-store addr [4:0] %lx" , tmp &0xf ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();report_prefix_pop (); }@@ -5110,16 +5108,16 @@ static void test_exit_msr_store(void)1ul << i;vmcs_write (EXIT_MSR_ST_ADDR , tmp - (exit_msr_st_cnt *16 -1 )); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls (); }vmcs_write (EXI_MSR_ST_CNT ,2 );vmcs_write (EXIT_MSR_ST_ADDR , (1ULL <<cpuid_maxphyaddr ()) -16 ); -test_vmx_invalid_controls (false); +test_vmx_invalid_controls ();vmcs_write (EXIT_MSR_ST_ADDR , (1ULL <<cpuid_maxphyaddr ()) -32 ); -test_vmx_valid_controls (false); +test_vmx_valid_controls ();vmcs_write (EXIT_MSR_ST_ADDR , (1ULL <<cpuid_maxphyaddr ()) -48 ); -test_vmx_valid_controls (false); +test_vmx_valid_controls (); }/* @@ -6616,12 +6614,12 @@ static void test_sysenter_field(u32 field, const char *name)vmcs_write (field,NONCANONICAL );report_prefix_pushf ("%s non-canonical" , name); -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop ();vmcs_write (field,0xffffffff );report_prefix_pushf ("%s canonical" , name); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop ();vmcs_write (field, addr_saved);@@ -6640,10 +6638,9 @@ static void test_ctl_reg(const char *cr_name, u64 cr, u64 fixed0, u64 fixed1)vmcs_write (cr, val);report_prefix_pushf ("%s %lx" , cr_name, val);if (val == fixed0) -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );else -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop ();for (i =0 ; i <64 ; i++) {@@ -6658,8 +6655,7 @@ static void test_ctl_reg(const char *cr_name, u64 cr, u64 fixed0, u64 fixed1)report_prefix_pushf ("%s %llx" , cr_name, cr_saved | (1ull << i));test_vmx_vmlaunch ( -VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop (); }@@ -6669,8 +6665,7 @@ static void test_ctl_reg(const char *cr_name, u64 cr, u64 fixed0, u64 fixed1)report_prefix_pushf ("%s %llx" , cr_name, cr_saved & ~(1ull << i));test_vmx_vmlaunch ( -VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop (); } }@@ -6711,8 +6706,7 @@ static void test_host_ctl_regs(void) cr3 = cr3_saved | (1ul << i);vmcs_write (HOST_CR3 , cr3);report_prefix_pushf ("HOST_CR3 %lx" , cr3); -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop (); }@@ -6733,14 +6727,14 @@ static void test_efer_bit(u32 fld, const char * fld_name, u32 ctrl_fld,vmcs_write (fld, efer);report_prefix_pushf ("%s bit turned off, %s %lx" , efer_bit_name, fld_name, efer); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); efer = efer_saved | efer_bit;vmcs_write (fld, efer);report_prefix_pushf ("%s bit turned on, %s %lx" , efer_bit_name, fld_name, efer); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop ();vmcs_write (ctrl_fld, ctrl_saved | ctrl_bit);@@ -6749,10 +6743,9 @@ static void test_efer_bit(u32 fld, const char * fld_name, u32 ctrl_fld,report_prefix_pushf ("%s bit turned off, %s %lx" , efer_bit_name, fld_name, efer);if (host_addr_size) -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );else -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); efer = efer_saved | efer_bit;@@ -6760,10 +6753,9 @@ static void test_efer_bit(u32 fld, const char * fld_name, u32 ctrl_fld,report_prefix_pushf ("%s bit turned on, %s %lx" , efer_bit_name, fld_name, efer);if (host_addr_size) -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );else -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop ();vmcs_write (ctrl_fld, ctrl_saved);@@ -6791,7 +6783,7 @@ static void test_efer(u32 fld, const char * fld_name, u32 ctrl_fld, efer = efer_saved | (1ull << i);vmcs_write (fld, efer);report_prefix_pushf ("%s %lx" , fld_name, efer); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); } }@@ -6803,8 +6795,7 @@ static void test_efer(u32 fld, const char * fld_name, u32 ctrl_fld,vmcs_write (fld, efer);report_prefix_pushf ("%s %lx" , fld_name, efer);test_vmx_vmlaunch ( -VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop (); } }@@ -6868,7 +6859,7 @@ static void test_pat(u32 field, const char * field_name, u32 ctrl_field,vmcs_write (field, val);if (field ==HOST_PAT ) {report_prefix_pushf ("%s %lx" , field_name, val); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); }else {// GUEST_PAT @@ -6895,7 +6886,7 @@ static void test_pat(u32 field, const char * field_name, u32 ctrl_field,else error =0 ; -test_vmx_vmlaunch (error, false); +test_vmx_vmlaunch (error);report_prefix_pop (); }else {// GUEST_PAT @@ -6981,9 +6972,9 @@ static void test_vmcs_field(u64 field, const char *field_name, u32 bit_start,vmcs_write (field, tmp);report_prefix_pushf ("%s %lx" , field_name, tmp);if (valid_val) -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );else -test_vmx_vmlaunch (error, false); +test_vmx_vmlaunch (error);report_prefix_pop ();for (i = bit_start; i <= bit_end; i = i +2 ) {@@ -6995,9 +6986,9 @@ static void test_vmcs_field(u64 field, const char *field_name, u32 bit_start,vmcs_write (field, tmp);report_prefix_pushf ("%s %lx" , field_name, tmp);if (valid_val) -test_vmx_vmlaunch (error, false); +test_vmx_vmlaunch (error);else -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); }@@ -7011,19 +7002,17 @@ static void test_canonical(u64 field, const char * field_name)report_prefix_pushf ("%s %lx" , field_name, addr);if (is_canonical (addr)) { -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop (); addr =make_non_canonical (addr);vmcs_write (field, addr);report_prefix_pushf ("%s %lx" , field_name, addr); -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );vmcs_write (field, addr_saved); }else { -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , - false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD ); }report_prefix_pop (); }@@ -7076,14 +7065,14 @@ static void test_host_segment_regs(void)vmcs_write (HOST_SEL_SS ,0 );if (exit_ctrl_saved &EXI_HOST_64 ) {report_prefix_pushf ("HOST_SEL_SS 0" ); -test_vmx_vmlaunch (0 , false); +test_vmx_vmlaunch (0 );report_prefix_pop ();
x86/vmx_tests.c static void test_host_segment_regs(void) · line 7078
Quoted 10 lines
x86/vmx_tests.c +1
-1vmcs_write (EXI_CONTROLS , exit_ctrl_saved & ~EXI_HOST_64 ); }report_prefix_pushf ("HOST_SEL_SS 0" ); -test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD , false); +test_vmx_vmlaunch (VMXERR_ENTRY_INVALID_HOST_STATE_FIELD );report_prefix_pop ();vmcs_write (HOST_SEL_SS , selector_saved);
Applied, thanks.
Paolo