* [PATCH] KVM: x86: Disallow EFER.LMSLE when EferLmsleUnsupported is set in guest CPUID
@ 2026-09-18 15:45 Jim Mattson
2026-09-18 15:56 ` Sean Christopherson
0 siblings, 1 reply; 2+ messages in thread
From: Jim Mattson @ 2026-09-18 15:45 UTC (permalink / raw)
To: Sean Christopherson, Paolo Bonzini
Cc: kvm, linux-kernel, Nikunj A Dadhania, Yosry Ahmed, Jim Mattson
Reject guest writes to EFER (and nested VMRUN with VMCB12 EFER) that set
EFER.LMSLE when CPUID.80000008H:EBX.EferLmsleUnsupported[bit 20] is set
in the guest's CPUID.
Commit c53c632592a4 ("KVM: SVM: Disallow EFER.LMSLE when not supported by
hardware") prevented EFER.LMSLE from being enabled in supported_efer_bits
on hosts that set EferLmsleUnsupported, but missed checking the guest
CPUID capability in __kvm_valid_efer(). As a result, on a host that
supports EFER.LMSLE (e.g. Rome), a guest whose userspace VMM sets
EferLmsleUnsupported in guest CPUID (e.g. for migration compatibility
with Milan, Genoa, or Turin) can still set EFER.LMSLE without triggering
a #GP.
Fixes: c53c632592a4 ("KVM: SVM: Disallow EFER.LMSLE when not supported by hardware")
Assisted-by: LLM
Signed-off-by: Jim Mattson <jmattson@google.com>
---
arch/x86/kvm/msrs.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/arch/x86/kvm/msrs.c b/arch/x86/kvm/msrs.c
index dd3bb04878ca..6dbaf063cc8d 100644
--- a/arch/x86/kvm/msrs.c
+++ b/arch/x86/kvm/msrs.c
@@ -598,8 +598,11 @@ static bool __kvm_valid_efer(struct kvm_vcpu *vcpu, u64 efer)
if (efer & EFER_NX && !guest_cpu_cap_has(vcpu, X86_FEATURE_NX))
return false;
- return true;
+ if (efer & EFER_LMSLE &&
+ guest_cpu_cap_has(vcpu, X86_FEATURE_EFER_LMSLE_MBZ))
+ return false;
+ return true;
}
bool kvm_valid_efer(struct kvm_vcpu *vcpu, u64 efer)
{
--
2.55.0.1082.g2b9226bbc0-goog
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] KVM: x86: Disallow EFER.LMSLE when EferLmsleUnsupported is set in guest CPUID
2026-09-18 15:45 [PATCH] KVM: x86: Disallow EFER.LMSLE when EferLmsleUnsupported is set in guest CPUID Jim Mattson
@ 2026-09-18 15:56 ` Sean Christopherson
0 siblings, 0 replies; 2+ messages in thread
From: Sean Christopherson @ 2026-09-18 15:56 UTC (permalink / raw)
To: Jim Mattson
Cc: Paolo Bonzini, kvm, linux-kernel, Nikunj A Dadhania, Yosry Ahmed
On Fri, Sep 18, 2026, Jim Mattson wrote:
> Reject guest writes to EFER (and nested VMRUN with VMCB12 EFER) that set
> EFER.LMSLE when CPUID.80000008H:EBX.EferLmsleUnsupported[bit 20] is set
> in the guest's CPUID.
>
> Commit c53c632592a4 ("KVM: SVM: Disallow EFER.LMSLE when not supported by
> hardware") prevented EFER.LMSLE from being enabled in supported_efer_bits
> on hosts that set EferLmsleUnsupported, but missed checking the guest
> CPUID capability in __kvm_valid_efer(). As a result, on a host that
> supports EFER.LMSLE (e.g. Rome), a guest whose userspace VMM sets
> EferLmsleUnsupported in guest CPUID (e.g. for migration compatibility
> with Milan, Genoa, or Turin) can still set EFER.LMSLE without triggering
> a #GP.
>
> Fixes: c53c632592a4 ("KVM: SVM: Disallow EFER.LMSLE when not supported by hardware")
> Assisted-by: LLM
> Signed-off-by: Jim Mattson <jmattson@google.com>
> ---
> arch/x86/kvm/msrs.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/kvm/msrs.c b/arch/x86/kvm/msrs.c
> index dd3bb04878ca..6dbaf063cc8d 100644
> --- a/arch/x86/kvm/msrs.c
> +++ b/arch/x86/kvm/msrs.c
> @@ -598,8 +598,11 @@ static bool __kvm_valid_efer(struct kvm_vcpu *vcpu, u64 efer)
> if (efer & EFER_NX && !guest_cpu_cap_has(vcpu, X86_FEATURE_NX))
> return false;
>
> - return true;
> + if (efer & EFER_LMSLE &&
> + guest_cpu_cap_has(vcpu, X86_FEATURE_EFER_LMSLE_MBZ))
> + return false;
>
> + return true;
In case anyone else was wondering, this is NOT whitespace damage, the "movement"
of the "return true" is due to deleting a trailing spurious newline, e.g. my
configuration of diff yeilds:
diff --git a/arch/x86/kvm/msrs.c b/arch/x86/kvm/msrs.c
index dd3bb04878ca..6dbaf063cc8d 100644
--- a/arch/x86/kvm/msrs.c
+++ b/arch/x86/kvm/msrs.c
@@ -598,8 +598,11 @@ static bool __kvm_valid_efer(struct kvm_vcpu *vcpu, u64 efer)
if (efer & EFER_NX && !guest_cpu_cap_has(vcpu, X86_FEATURE_NX))
return false;
+ if (efer & EFER_LMSLE &&
+ guest_cpu_cap_has(vcpu, X86_FEATURE_EFER_LMSLE_MBZ))
+ return false;
+
return true;
-
}
bool kvm_valid_efer(struct kvm_vcpu *vcpu, u64 efer)
{
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-09-18 15:56 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-18 15:45 [PATCH] KVM: x86: Disallow EFER.LMSLE when EferLmsleUnsupported is set in guest CPUID Jim Mattson
2026-09-18 15:56 ` Sean Christopherson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®