Commit a08ca669 authored by Sean Christopherson's avatar Sean Christopherson
Browse files

KVM: SVM: Limit incorrect check on SVM_EXIT_ERR to running as a VM



Limit KVM's incorrect check for VMXEXIT_INVALID, a.k.a. SVM_EXIT_ERR, to
running as a VM, as detected by X86_FEATURE_HYPERVISOR.  The exit_code and
all failure codes, e.g. VMXEXIT_INVALID, are 64-bit values, and so checking
only bits 31:0 could result in false positives when running on non-broken
hardware, e.g. in the extremely unlikely scenario exit code 0xffffffffull
is ever generated by hardware.

Keep the 32-bit check to play nice with running on broken KVM (for years,
KVM has not set bits 63:32 when synthesizing nested SVM VM-Exits).

Reviewed-by: default avatarYosry Ahmed <yosry.ahmed@linux.dev>
Link: https://patch.msgid.link/20251230211347.4099600-7-seanjc@google.com


Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
parent d7507a94
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -426,7 +426,10 @@ static __always_inline struct vcpu_svm *to_svm(struct kvm_vcpu *vcpu)

static inline bool svm_is_vmrun_failure(u64 exit_code)
{
	if (cpu_feature_enabled(X86_FEATURE_HYPERVISOR))
		return (u32)exit_code == (u32)SVM_EXIT_ERR;

	return exit_code == SVM_EXIT_ERR;
}

/*