linux/arch/x86/kvm
Paolo Bonzini ae9fedc793 KVM: x86: get CPL from SS.DPL
CS.RPL is not equal to the CPL in the few instructions between
setting CR0.PE and reloading CS.  And CS.DPL is also not equal
to the CPL for conforming code segments.

However, SS.DPL *is* always equal to the CPL except for the weird
case of SYSRET on AMD processors, which sets SS.DPL=SS.RPL from the
value in the STAR MSR, but force CPL=3 (Intel instead forces
SS.DPL=SS.RPL=CPL=3).

So this patch:

- modifies SVM to update the CPL from SS.DPL rather than CS.RPL;
the above case with SYSRET is not broken further, and the way
to fix it would be to pass the CPL to userspace and back

- modifies VMX to always return the CPL from SS.DPL (except
forcing it to 0 if we are emulating real mode via vm86 mode;
in vm86 mode all DPLs have to be 3, but real mode does allow
privileged instructions).  It also removes the CPL cache,
which becomes a duplicate of the SS access rights cache.

This fixes doing KVM_IOCTL_SET_SREGS exactly after setting
CR0.PE=1 but before CS has been reloaded.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2014-05-22 17:47:17 +02:00
..
cpuid.c kvm: x86: emulate monitor and mwait instructions as nop 2014-05-08 15:40:49 +02:00
cpuid.h KVM: x86: Mark bit 7 in long-mode PDPTE according to 1GB pages support 2014-05-07 17:25:22 +02:00
emulate.c KVM: x86: check CS.DPL against RPL during task switch 2014-05-22 17:47:17 +02:00
i8254.c KVM: x86: limit PIT timer frequency 2014-01-15 12:43:54 +01:00
i8254.h
i8259.c KVM: inject ExtINT interrupt before APIC interrupts 2012-12-13 23:05:21 -02:00
irq.c KVM: nVMX: Ack and write vector info to intr_info if L1 asks us to 2014-04-22 18:41:33 -03:00
irq.h
Kconfig kvm: make KVM_MMU_AUDIT help text more readable 2014-01-20 12:59:26 +01:00
kvm_cache_regs.h
lapic.c First round of KVM updates for 3.14; PPC parts will come next week. 2014-01-22 21:40:43 -08:00
lapic.h KVM: x86: Validate guest writes to MSR_IA32_APICBASE 2014-01-27 14:39:44 +01:00
Makefile kvm: Add VFIO device 2013-10-30 19:02:03 +01:00
mmu_audit.c kvm: mmu: delay mmu audit activation 2013-11-20 11:12:56 +02:00
mmu.c KVM: x86: Mark bit 7 in long-mode PDPTE according to 1GB pages support 2014-05-07 17:25:22 +02:00
mmu.h KVM: MMU: flush tlb out of mmu lock when write-protect the sptes 2014-04-23 17:49:52 -03:00
mmutrace.h KVM: MMU: add tracepoint for check_mmio_spte 2013-06-27 14:20:37 +03:00
paging_tmpl.h Revert "KVM: Simplify kvm->tlbs_dirty handling" 2014-04-23 17:49:48 -03:00
pmu.c KVM: x86: Fix wrong/stuck PMU when guest does not use PMI 2014-04-23 17:46:52 -03:00
svm.c KVM: x86: get CPL from SS.DPL 2014-05-22 17:47:17 +02:00
trace.h KVM: x86: improve the usability of the 'kvm_pio' tracepoint 2014-05-05 22:42:05 +02:00
tss.h
vmx.c KVM: x86: get CPL from SS.DPL 2014-05-22 17:47:17 +02:00
x86.c KVM: x86: drop set_rflags callback 2014-05-22 17:47:16 +02:00
x86.h KVM: x86: introduce kvm_supported_xcr0() 2014-03-17 12:21:38 +01:00