Currently, KVM may return a variety of internal errors to VMM when accessing MMIO, and some of them could be gracefully handled on the KVM level instead. Moreover, some of the MMIO-related errors are handled differently in VMX in comparison with SVM, which produces certain inconsistency and should be fixed. This patch series introduces KVM-level handling for the following situations:
1) Guest is accessing MMIO during event delivery: triple fault instead of internal error on VMX and infinite loop on SVM
2) Guest fetches an instruction from MMIO: inject #UD and resume guest execution without internal error
Additionaly, this patch series includes a KVM selftest which covers different cases of MMIO misuse.
Also, update the set_memory_region_test to expect the triple fault when starting VM with no RAM.
Ivan Orlov (4): KVM: vmx, svm, mmu: Fix MMIO during event delivery handling KVM: x86: Inject UD when fetching from MMIO selftests: KVM: Change expected exit code in test_zero_memory_regions selftests: KVM: Add new test for faulty mmio usage
arch/x86/include/asm/kvm_host.h | 6 + arch/x86/kvm/emulate.c | 3 + arch/x86/kvm/kvm_emulate.h | 1 + arch/x86/kvm/mmu/mmu.c | 13 +- arch/x86/kvm/svm/svm.c | 4 + arch/x86/kvm/vmx/vmx.c | 21 +- arch/x86/kvm/x86.c | 7 +- tools/testing/selftests/kvm/Makefile | 1 + .../selftests/kvm/set_memory_region_test.c | 3 +- .../selftests/kvm/x86_64/faulty_mmio.c | 199 ++++++++++++++++++ 10 files changed, 242 insertions(+), 16 deletions(-) create mode 100644 tools/testing/selftests/kvm/x86_64/faulty_mmio.c