On Fri, Jul 26, 2019 at 10:52 PM Sean Christopherson <sean.j.christopherson@xxxxxxxxx> wrote: > > Similar to the existing AMD #NPF case where emulation of the current > instruction is not possible due to lack of information, virtualization > of Intel SGX will introduce a scenario where emulation is not possible > due to the VMExit occurring in an SGX enclave. And again similar to > the AMD case, emulation can be initiated by kvm_mmu_page_fault(), i.e. > outside of the control of the vendor-specific code. > > While the cause and architecturally visible behavior of the two cases > is different, e.g. Intel SGX will inject a #UD whereas AMD #NPF is a > clean resume or complete shutdown, the impact on the common emulation > code is identical: KVM must stop emulation immediately and resume the > guest. > > Replace the exisiting need_emulation_on_page_fault() with a more generic > is_emulatable() kvm_x86_ops callback, which is called unconditionally > by x86_emulate_instruction(). > Having recently noticed that emulate_ud() is broken when the guest's TF is set, I suppose I should ask: does your new code function sensibly when TF is set? Also, anyone want to fix that emulate_ud() bug? The test case is merged now: # ./tools/testing/selftests/x86/syscall_arg_fault_32 [RUN] SYSENTER with invalid state [OK] Seems okay [RUN] SYSCALL with invalid state [SKIP] Illegal instruction [RUN] SYSENTER with TF and invalid state [OK] Seems okay [RUN] SYSCALL with TF and invalid state [WARN] Got stuck single-stepping -- you probably have a KVM bug