aboutsummaryrefslogtreecommitdiff
path: root/target
diff options
context:
space:
mode:
authorLara Lazier <laramglazier@gmail.com>2021-06-16 14:39:05 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2021-06-16 15:02:40 +0200
commit7eb54ca95d369135f2570c10daf1a41a1f8a6b9c (patch)
tree04db8539330db0e3ea9fdba9266be8fbcf1695e2 /target
parent813c6459ee774ee48496653cd530658b733b79cd (diff)
downloadqemu-7eb54ca95d369135f2570c10daf1a41a1f8a6b9c.zip
qemu-7eb54ca95d369135f2570c10daf1a41a1f8a6b9c.tar.gz
qemu-7eb54ca95d369135f2570c10daf1a41a1f8a6b9c.tar.bz2
target/i386: Added consistency checks for VMRUN intercept and ASID
Zero VMRUN intercept and ASID should cause an immediate VMEXIT during the consistency checks performed by VMRUN. (AMD64 Architecture Programmer's Manual, V2, 15.5) Signed-off-by: Lara Lazier <laramglazier@gmail.com> Message-Id: <20210616123907.17765-3-laramglazier@gmail.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'target')
-rw-r--r--target/i386/tcg/sysemu/svm_helper.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/target/i386/tcg/sysemu/svm_helper.c b/target/i386/tcg/sysemu/svm_helper.c
index 2f7606b..902bf03 100644
--- a/target/i386/tcg/sysemu/svm_helper.c
+++ b/target/i386/tcg/sysemu/svm_helper.c
@@ -72,6 +72,7 @@ void helper_vmrun(CPUX86State *env, int aflag, int next_eip_addend)
uint64_t nested_ctl;
uint32_t event_inj;
uint32_t int_ctl;
+ uint32_t asid;
cpu_svm_check_intercept_param(env, SVM_EXIT_VMRUN, 0, GETPC());
@@ -154,9 +155,18 @@ void helper_vmrun(CPUX86State *env, int aflag, int next_eip_addend)
nested_ctl = x86_ldq_phys(cs, env->vm_vmcb + offsetof(struct vmcb,
control.nested_ctl));
+ asid = x86_ldq_phys(cs, env->vm_vmcb + offsetof(struct vmcb,
+ control.asid));
env->nested_pg_mode = 0;
+ if (!cpu_svm_has_intercept(env, SVM_EXIT_VMRUN)) {
+ cpu_vmexit(env, SVM_EXIT_ERR, 0, GETPC());
+ }
+ if (asid == 0) {
+ cpu_vmexit(env, SVM_EXIT_ERR, 0, GETPC());
+ }
+
if (nested_ctl & SVM_NPT_ENABLED) {
env->nested_cr3 = x86_ldq_phys(cs,
env->vm_vmcb + offsetof(struct vmcb,