Re: [PATCH 1/1 v2] nSVM: Test effect of host RFLAGS.TF on VMRUN

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 05/02/21 00:29, Krish Sadhukhan wrote:

+static void host_rflags_prepare(struct svm_test *test)
+{
+	default_prepare(test);
+	handle_exception(DB_VECTOR, host_rflags_db_handler);
+	set_test_stage(test, 0);
+	/*
+	 * We trigger a #UD in order to find out the RIP of VMRUN instruction
+	 */
+	wrmsr(MSR_EFER, rdmsr(MSR_EFER) & ~EFER_SVME);
+	handle_exception(UD_VECTOR, host_rflags_ud_handler);
+}
+

I think you'd get the RIP of VMLOAD, not VMRUN.

Maybe something like:

diff --git a/x86/svm.c b/x86/svm.c
index a1808c7..88d8452 100644
--- a/x86/svm.c
+++ b/x86/svm.c
@@ -208,14 +208,14 @@ struct regs get_regs(void)

 struct svm_test *v2_test;

-#define ASM_VMRUN_CMD                           \
+#define ASM_PRE_VMRUN                           \
                 "vmload %%rax\n\t"              \
                 "mov regs+0x80, %%r15\n\t"      \
                 "mov %%r15, 0x170(%%rax)\n\t"   \
                 "mov regs, %%r15\n\t"           \
                 "mov %%r15, 0x1f8(%%rax)\n\t"   \
-                LOAD_GPR_C                      \
-                "vmrun %%rax\n\t"               \
+                LOAD_GPR_C
+#define ASM_POST_VMRUN                          \
                 SAVE_GPR_C                      \
                 "mov 0x170(%%rax), %%r15\n\t"   \
                 "mov %%r15, regs+0x80\n\t"      \
@@ -232,7 +232,9 @@ int svm_vmrun(void)
 	regs.rdi = (ulong)v2_test;

 	asm volatile (
-		ASM_VMRUN_CMD
+		ASM_PRE_VMRUN
+                "vmrun %%rax\n\t"
+		ASM_POST_VMRUN
 		:
 		: "a" (virt_to_phys(vmcb))
 		: "memory", "r15");
@@ -240,6 +242,7 @@ int svm_vmrun(void)
 	return (vmcb->control.exit_code);
 }

+extern unsigned char vmrun_rip;
 static void test_run(struct svm_test *test)
 {
 	u64 vmcb_phys = virt_to_phys(vmcb);
@@ -258,7 +261,9 @@ static void test_run(struct svm_test *test)
 			"sti \n\t"
 			"call *%c[PREPARE_GIF_CLEAR](%[test]) \n \t"
 			"mov %[vmcb_phys], %%rax \n\t"
-			ASM_VMRUN_CMD
+		        ASM_PRE_VMRUN
+                        "vmrun_rip: vmrun %%rax\n\t"
+		        ASM_POST_VMRUN
 			"cli \n\t"
 			"stgi"
 			: // inputs clobbered by the guest:

(untested)

Paolo




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux