Linux kernel documentation states: "Note! KVM_EXIT_MEMORY_FAULT is unique among all KVM exit reasons in that it accompanies a return code of '-1', not '0'! errno will always be set to EFAULT or EHWPOISON when KVM exits with KVM_EXIT_MEMORY_FAULT, userspace should assume kvm_run.exit_reason is stale/undefined for all other error numbers." " Update the KVM_RUN ioctl error handling to correctly handle KVM_EXIT_MEMORY_FAULT. Signed-off-by: Aneesh Kumar K.V (Arm) <aneesh.kumar@xxxxxxxxxx> --- kvm-cpu.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/kvm-cpu.c b/kvm-cpu.c index 66e30ba54e26..40e4efc33a1d 100644 --- a/kvm-cpu.c +++ b/kvm-cpu.c @@ -41,8 +41,15 @@ void kvm_cpu__run(struct kvm_cpu *vcpu) return; err = ioctl(vcpu->vcpu_fd, KVM_RUN, 0); - if (err < 0 && (errno != EINTR && errno != EAGAIN)) - die_perror("KVM_RUN failed"); + if (err < 0) { + if (errno == EINTR || errno == EAGAIN) + return; + else if (errno == EFAULT && + vcpu->kvm_run->exit_reason == KVM_EXIT_MEMORY_FAULT) + return; + else + die_perror("KVM_RUN failed"); + } } static void kvm_cpu_signal_handler(int signum) -- 2.43.0