linux_dsm_epyc7002/arch
Liran Alon 04789b6664 KVM: x86: Emulate only IN/OUT instructions when accessing VMware backdoor
Access to VMware backdoor ports is done by one of the IN/OUT/INS/OUTS
instructions. These ports must be allowed access even if TSS I/O
permission bitmap don't allow it.

To handle this, VMX/SVM will be changed in future commits
to intercept #GP which was raised by such access and
handle it by calling x86 emulator to emulate instruction.
If it was one of these instructions, the x86 emulator already handles
it correctly (Since commit "KVM: x86: Always allow access to VMware
backdoor I/O ports") by not checking these ports against TSS I/O
permission bitmap.

One may wonder why checking for specific instructions is necessary
as we can just forward all #GPs to the x86 emulator.
There are multiple reasons for doing so:

1. We don't want the x86 emulator to be reached easily
by guest by just executing an instruction that raises #GP as that
exposes the x86 emulator as a bigger attack surface.

2. The x86 emulator is incomplete and therefore certain instructions
that can cause #GP cannot be emulated. Such an example is "INT x"
(opcode 0xcd) which reaches emulate_int() which can only emulate
the instruction if vCPU is in real-mode.

Signed-off-by: Liran Alon <liran.alon@oracle.com>
Reviewed-by: Nikita Leshenko <nikita.leshchenko@oracle.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2018-03-16 22:01:42 +01:00
..
alpha locking/xchg/alpha: Fix xchg() and cmpxchg() memory ordering bugs 2018-02-23 08:38:16 +01:00
arc ARC fixes for 4.16-rc4 2018-03-01 14:32:23 -08:00
arm ARM: SoC fixes for 4.16 2018-02-28 16:11:04 -08:00
arm64 ARM: SoC fixes for 4.16 2018-02-28 16:11:04 -08:00
blackfin
c6x
cris bug.h: work around GCC PR82365 in BUG() 2018-02-21 15:35:43 -08:00
frv
h8300
hexagon
ia64 bug.h: work around GCC PR82365 in BUG() 2018-02-21 15:35:43 -08:00
m32r
m68k bug.h: work around GCC PR82365 in BUG() 2018-02-21 15:35:43 -08:00
metag
microblaze
mips KVM: Introduce paravirtualization hints and KVM_HINTS_DEDICATED 2018-03-06 18:40:44 +01:00
mn10300
nios2
openrisc
parisc Merge branch 'parisc-4.16-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux 2018-03-02 13:05:20 -08:00
powerpc KVM: Introduce paravirtualization hints and KVM_HINTS_DEDICATED 2018-03-06 18:40:44 +01:00
riscv riscv/barrier: Define __smp_{mb,rmb,wmb} 2018-02-26 08:44:50 -08:00
s390 KVM: Introduce paravirtualization hints and KVM_HINTS_DEDICATED 2018-03-06 18:40:44 +01:00
score
sh sh: fix build error for empty CONFIG_BUILTIN_DTB_SOURCE 2018-03-02 09:20:55 +09:00
sparc bug.h: work around GCC PR82365 in BUG() 2018-02-21 15:35:43 -08:00
tile
um
unicore32
x86 KVM: x86: Emulate only IN/OUT instructions when accessing VMware backdoor 2018-03-16 22:01:42 +01:00
xtensa
.gitignore
Kconfig