qemu/target-i386
Paolo Bonzini 7125c937c9 target-i386: get CPL from SS.DPL
CS.RPL is not equal to the CPL in the few instructions between
setting CR0.PE and reloading CS.  We get this right in the common
case, because writes to CR0 do not modify the CPL, but it would
not be enough if an SMI comes exactly during that brief period.
Were this to happen, the RSM instruction would erroneously set
CPL to the low two bits of the real-mode selector; and if they are
not 00, the next instruction fetch cannot access the code segment
and causes a triple fault.

However, SS.DPL *is* always equal to the CPL.  In real processors
(AMD only) there is a weird case of SYSRET setting SS.DPL=SS.RPL
from the STAR register while forcing CPL=3, but we do not emulate
that.

Tested-by: Kevin O'Connor <kevin@koconnor.net>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2014-05-21 18:02:08 +02:00
..
arch_dump.c dump: rebase from host-private RAMBlock offsets to guest-physical addresses 2013-08-08 11:01:46 -04:00
arch_memory_mapping.c exec: Make ldq/ldub_*_phys input an AddressSpace 2014-02-11 22:57:00 +10:00
cc_helper_template.h target-i386: Implement BLSR, BLSMSK, BLSI 2013-02-18 15:52:05 -08:00
cc_helper.c target-i386: Fix CC_OP_CLR vs PF 2014-02-28 08:43:15 -08:00
cpu-qom.h target-i386: X86CPU model subclasses 2014-03-13 19:20:07 +01:00
cpu.c target-i386: preserve FPU and MSR state on INIT 2014-05-13 13:12:40 +02:00
cpu.h target-i386: get CPL from SS.DPL 2014-05-21 18:02:08 +02:00
excp_helper.c cpu-exec: Change cpu_loop_exit() argument to CPUState 2014-03-13 19:20:47 +01:00
fpu_helper.c target-i386: Fix SSE status flag corruption 2014-02-28 08:44:01 -08:00
gdbstub.c target-i386: fix segment flags for SMM and VM86 mode 2014-05-21 18:02:08 +02:00
helper.c target-i386: preserve FPU and MSR state on INIT 2014-05-13 13:12:40 +02:00
helper.h target-i386: yield to another VCPU on PAUSE 2013-11-21 17:39:20 +01:00
int_helper.c target-i386/helper: remove EDX macro 2013-06-15 17:49:10 +00:00
ioport-user.c exec: move include files to include/exec/ 2012-12-19 08:31:31 +01:00
kvm_i386.h kvm: forward INIT signals coming from the chipset 2014-05-13 13:12:40 +02:00
kvm-stub.c target-i386: Fix build by providing stub kvm_arch_get_supported_cpuid() 2013-11-21 17:39:11 +01:00
kvm.c target-i386: get CPL from SS.DPL 2014-05-21 18:02:08 +02:00
machine.c target-i386: get CPL from SS.DPL 2014-05-21 18:02:08 +02:00
Makefile.objs Makefile.target: CONFIG_NO_* variables removed 2013-10-16 18:21:00 +02:00
mem_helper.c translate-all: Change cpu_restore_state() argument to CPUState 2014-03-13 19:20:47 +01:00
misc_helper.c cputlb: Change tlb_flush_page() argument to CPUState 2014-03-13 19:52:47 +01:00
ops_sse_header.h target-i386: add AES-NI instructions 2013-04-13 13:51:57 +02:00
ops_sse.h target-i386: add AES-NI instructions 2013-04-13 13:51:57 +02:00
seg_helper.c target-i386: rework CPL checks during task switch, preparing for next patch 2014-05-21 18:02:08 +02:00
shift_helper_template.h target-i386: compute eflags outside rcl/rcr helper 2013-02-18 15:03:56 -08:00
smm_helper.c target-i386: fix segment flags for SMM and VM86 mode 2014-05-21 18:02:08 +02:00
svm_helper.c target-i386: the x86 CPL is stored in CS.selector - auto update hflags accordingly. 2014-05-13 13:12:40 +02:00
svm.h Use new macro QEMU_PACKED for packed structures 2011-09-03 10:45:59 +00:00
TODO target-i386: fix {min,max}{pd,ps,sd,ss} SSE2 instructions 2012-01-11 09:55:28 +01:00
topology.h target-i386: Inline bitops_flsl 2013-02-16 11:12:29 +00:00
translate.c target-i386: Preserve the Z bit for bt/bts/btr/btc 2014-05-12 14:20:04 -07:00