mirror of https://github.com/xemu-project/xemu.git
target/i386: Added DR6 and DR7 consistency checks
DR6[63:32] and DR7[63:32] are reserved and need to be zero. (AMD64 Architecture Programmer's Manual, V2, 15.5) Signed-off-by: Lara Lazier <laramglazier@gmail.com> Message-Id: <20210705081802.18960-3-laramglazier@gmail.com> [Ignore for 32-bit builds. - Paolo] Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
481077b28b
commit
acf23ffb58
|
@ -140,6 +140,8 @@
|
||||||
#define SVM_MSRPM_SIZE (1ULL << 13)
|
#define SVM_MSRPM_SIZE (1ULL << 13)
|
||||||
#define SVM_IOPM_SIZE ((1ULL << 13) + 1)
|
#define SVM_IOPM_SIZE ((1ULL << 13) + 1)
|
||||||
|
|
||||||
|
#define SVM_DR_RESERVED_MASK 0xffffffff00000000ULL
|
||||||
|
|
||||||
struct QEMU_PACKED vmcb_control_area {
|
struct QEMU_PACKED vmcb_control_area {
|
||||||
uint16_t intercept_cr_read;
|
uint16_t intercept_cr_read;
|
||||||
uint16_t intercept_cr_write;
|
uint16_t intercept_cr_write;
|
||||||
|
|
|
@ -269,7 +269,14 @@ void helper_vmrun(CPUX86State *env, int aflag, int next_eip_addend)
|
||||||
env->dr[6] = x86_ldq_phys(cs,
|
env->dr[6] = x86_ldq_phys(cs,
|
||||||
env->vm_vmcb + offsetof(struct vmcb, save.dr6));
|
env->vm_vmcb + offsetof(struct vmcb, save.dr6));
|
||||||
|
|
||||||
/* FIXME: guest state consistency checks */
|
#ifdef TARGET_X86_64
|
||||||
|
if (env->dr[6] & SVM_DR_RESERVED_MASK) {
|
||||||
|
cpu_vmexit(env, SVM_EXIT_ERR, 0, GETPC());
|
||||||
|
}
|
||||||
|
if (env->dr[7] & SVM_DR_RESERVED_MASK) {
|
||||||
|
cpu_vmexit(env, SVM_EXIT_ERR, 0, GETPC());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (x86_ldub_phys(cs,
|
switch (x86_ldub_phys(cs,
|
||||||
env->vm_vmcb + offsetof(struct vmcb, control.tlb_ctl))) {
|
env->vm_vmcb + offsetof(struct vmcb, control.tlb_ctl))) {
|
||||||
|
|
Loading…
Reference in New Issue