[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 35/45] target/i386: Added consistency checks for VMRUN intercept a
From: |
Paolo Bonzini |
Subject: |
[PULL 35/45] target/i386: Added consistency checks for VMRUN intercept and ASID |
Date: |
Thu, 17 Jun 2021 11:31:24 +0200 |
From: Lara Lazier <laramglazier@gmail.com>
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>
---
target/i386/tcg/sysemu/svm_helper.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/target/i386/tcg/sysemu/svm_helper.c
b/target/i386/tcg/sysemu/svm_helper.c
index 2f7606bebf..902bf03fc3 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,
--
2.31.1
- [PULL 42/45] util: Use unique type for QemuRecMutex in thread-posix.h, (continued)
- [PULL 42/45] util: Use unique type for QemuRecMutex in thread-posix.h, Paolo Bonzini, 2021/06/17
- [PULL 37/45] target/i386: Added Intercept CR0 writes check, Paolo Bonzini, 2021/06/17
- [PULL 44/45] qemu/compiler: Remove QEMU_GENERIC, Paolo Bonzini, 2021/06/17
- [PULL 43/45] include/qemu/lockable: Use _Generic instead of QEMU_GENERIC, Paolo Bonzini, 2021/06/17
- [PULL 21/45] softmmu/memory: Pass ram_flags to qemu_ram_alloc_from_fd(), Paolo Bonzini, 2021/06/17
- [PULL 25/45] memory: Introduce RAM_NORESERVE and wire it up in qemu_ram_mmap(), Paolo Bonzini, 2021/06/17
- [PULL 24/45] util/mmap-alloc: Pass flags instead of separate bools to qemu_ram_mmap(), Paolo Bonzini, 2021/06/17
- [PULL 27/45] hostmem: Wire up RAM_NORESERVE via "reserve" property, Paolo Bonzini, 2021/06/17
- [PULL 28/45] qmp: Clarify memory backend properties returned via query-memdev, Paolo Bonzini, 2021/06/17
- [PULL 30/45] hmp: Print "share" property of memory backends with "info memdev", Paolo Bonzini, 2021/06/17
- [PULL 35/45] target/i386: Added consistency checks for VMRUN intercept and ASID,
Paolo Bonzini <=
- [PULL 34/45] target/i386: Refactored intercept checks into cpu_svm_has_intercept, Paolo Bonzini, 2021/06/17
- [PULL 39/45] softfloat: Use _Generic instead of QEMU_GENERIC, Paolo Bonzini, 2021/06/17
- [PULL 41/45] util: Pass file+line to qemu_rec_mutex_unlock_impl, Paolo Bonzini, 2021/06/17
- [PULL 32/45] hmp: Print "reserve" property of memory backends with "info memdev", Paolo Bonzini, 2021/06/17
- [PULL 31/45] qmp: Include "reserve" property of memory backends, Paolo Bonzini, 2021/06/17
- [PULL 45/45] configure: Remove probe for _Static_assert, Paolo Bonzini, 2021/06/17
- Re: [PULL 00/45] Memory, i386, compilation, bugfix changes for 2021-06-17, no-reply, 2021/06/17
- Re: [PULL 00/45] Memory, i386, compilation, bugfix changes for 2021-06-17, Peter Maydell, 2021/06/18