-EFAULT isn't the problem, KVM not being able to return useful information in
all situations is the issue.
Specifically, "guest" accesses that are emulated
by KVM are problematic, because the -EFAULT from e.g. __kvm_write_guest_page()
is disconnected from the code that actually kicks out to userspace. In that
case, userspace will get KVM_EXIT_MMIO, not -EFAULT. There are more problems
beyond KVM_EXIT_MMIO vs. -EFAULT, e.g. instructions that perform multiple memory
accesses,
"failures" that are squashed and never propagated to userspace (PV
features tend to do this), page splits, etc.