* [PATCH v2 0/2] KVM: SVM: Handle EferLmsleUnsupported
@ 2025-10-01 0:14 Jim Mattson
2025-10-01 0:14 ` [PATCH v2 1/2] KVM: x86: Advertise EferLmsleUnsupported to userspace Jim Mattson
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Jim Mattson @ 2025-10-01 0:14 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
H. Peter Anvin, Sean Christopherson, Paolo Bonzini, Pawan Gupta,
Tom Lendacky, Jim Mattson, Perry Yuan, Sohil Mehta,
Xin Li (Intel), Joerg Roedel, Avi Kivity, linux-kernel, kvm,
Yosry Ahmed
It is no longer the case that EFER.LMSLE is supported by all SVM-capable
processors. AMD enumerates the absence of this feature by CPUID
Fn8000_0008_EBX[EferLmlseUnsupported](bit 20)=1.
Advertise this defeature bit to userspace via KVM_GET_SUPPORTED_CPUID,
and don't allow a guest to set EFER.LMSLE on hardware that doesn't
support the feature.
Jim Mattson (2):
KVM: x86: Advertise EferLmsleUnsupported to userspace
KVM: SVM: Disallow EFER.LMSLE when not supported by hardware
arch/x86/include/asm/cpufeatures.h | 1 +
arch/x86/kvm/cpuid.c | 1 +
arch/x86/kvm/svm/svm.c | 4 +++-
3 files changed, 5 insertions(+), 1 deletion(-)
--
2.51.0.618.g983fd99d29-goog
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH v2 1/2] KVM: x86: Advertise EferLmsleUnsupported to userspace 2025-10-01 0:14 [PATCH v2 0/2] KVM: SVM: Handle EferLmsleUnsupported Jim Mattson @ 2025-10-01 0:14 ` Jim Mattson 2025-10-01 15:17 ` Yosry Ahmed ` (2 more replies) 2025-10-01 0:14 ` [PATCH v2 2/2] KVM: SVM: Disallow EFER.LMSLE when not supported by hardware Jim Mattson 2025-10-20 16:33 ` [PATCH v2 0/2] KVM: SVM: Handle EferLmsleUnsupported Sean Christopherson 2 siblings, 3 replies; 10+ messages in thread From: Jim Mattson @ 2025-10-01 0:14 UTC (permalink / raw) To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, Sean Christopherson, Paolo Bonzini, Pawan Gupta, Tom Lendacky, Jim Mattson, Perry Yuan, Sohil Mehta, Xin Li (Intel), Joerg Roedel, Avi Kivity, linux-kernel, kvm, Yosry Ahmed CPUID.80000008H:EBX.EferLmsleUnsupported[bit 20] is a defeature bit. When this bit is clear, EFER.LMSLE is supported. When this bit is set, EFER.LMLSE is unsupported. KVM has never supported EFER.LMSLE, so it cannot support a 0-setting of this bit. Pass through the bit in KVM_GET_SUPPORTED_CPUID to advertise the unavailability of EFER.LMSLE to userspace. Signed-off-by: Jim Mattson <jmattson@google.com> --- v1 -> v2: Pass through the bit from hardware, rather than forcing it to be set. arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/kvm/cpuid.c | 1 + 2 files changed, 2 insertions(+) diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h index 751ca35386b0..f9b593721917 100644 --- a/arch/x86/include/asm/cpufeatures.h +++ b/arch/x86/include/asm/cpufeatures.h @@ -338,6 +338,7 @@ #define X86_FEATURE_AMD_STIBP (13*32+15) /* Single Thread Indirect Branch Predictors */ #define X86_FEATURE_AMD_STIBP_ALWAYS_ON (13*32+17) /* Single Thread Indirect Branch Predictors always-on preferred */ #define X86_FEATURE_AMD_IBRS_SAME_MODE (13*32+19) /* Indirect Branch Restricted Speculation same mode protection*/ +#define X86_FEATURE_EFER_LMSLE_MBZ (13*32+20) /* EFER.LMSLE must be zero */ #define X86_FEATURE_AMD_PPIN (13*32+23) /* "amd_ppin" Protected Processor Inventory Number */ #define X86_FEATURE_AMD_SSBD (13*32+24) /* Speculative Store Bypass Disable */ #define X86_FEATURE_VIRT_SSBD (13*32+25) /* "virt_ssbd" Virtualized Speculative Store Bypass Disable */ diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index e2836a255b16..4823970611fd 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -1096,6 +1096,7 @@ void kvm_set_cpu_caps(void) F(AMD_STIBP), F(AMD_STIBP_ALWAYS_ON), F(AMD_IBRS_SAME_MODE), + F(EFER_LMSLE_MBZ), F(AMD_PSFD), F(AMD_IBPB_RET), ); -- 2.51.0.618.g983fd99d29-goog ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/2] KVM: x86: Advertise EferLmsleUnsupported to userspace 2025-10-01 0:14 ` [PATCH v2 1/2] KVM: x86: Advertise EferLmsleUnsupported to userspace Jim Mattson @ 2025-10-01 15:17 ` Yosry Ahmed 2025-10-07 7:59 ` Nikunj A Dadhania 2025-10-14 22:49 ` Sean Christopherson 2 siblings, 0 replies; 10+ messages in thread From: Yosry Ahmed @ 2025-10-01 15:17 UTC (permalink / raw) To: Jim Mattson Cc: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, Sean Christopherson, Paolo Bonzini, Pawan Gupta, Tom Lendacky, Perry Yuan, Sohil Mehta, Xin Li (Intel), Joerg Roedel, Avi Kivity, linux-kernel, kvm On Tue, Sep 30, 2025 at 05:14:07PM -0700, Jim Mattson wrote: > CPUID.80000008H:EBX.EferLmsleUnsupported[bit 20] is a defeature > bit. When this bit is clear, EFER.LMSLE is supported. When this bit is > set, EFER.LMLSE is unsupported. KVM has never supported EFER.LMSLE, so > it cannot support a 0-setting of this bit. > > Pass through the bit in KVM_GET_SUPPORTED_CPUID to advertise the > unavailability of EFER.LMSLE to userspace. > > Signed-off-by: Jim Mattson <jmattson@google.com> Reviewed-by: Yosry Ahmed <yosry.ahmed@linux.dev> > --- > v1 -> v2: > Pass through the bit from hardware, rather than forcing it to be set. > > arch/x86/include/asm/cpufeatures.h | 1 + > arch/x86/kvm/cpuid.c | 1 + > 2 files changed, 2 insertions(+) > > diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h > index 751ca35386b0..f9b593721917 100644 > --- a/arch/x86/include/asm/cpufeatures.h > +++ b/arch/x86/include/asm/cpufeatures.h > @@ -338,6 +338,7 @@ > #define X86_FEATURE_AMD_STIBP (13*32+15) /* Single Thread Indirect Branch Predictors */ > #define X86_FEATURE_AMD_STIBP_ALWAYS_ON (13*32+17) /* Single Thread Indirect Branch Predictors always-on preferred */ > #define X86_FEATURE_AMD_IBRS_SAME_MODE (13*32+19) /* Indirect Branch Restricted Speculation same mode protection*/ > +#define X86_FEATURE_EFER_LMSLE_MBZ (13*32+20) /* EFER.LMSLE must be zero */ > #define X86_FEATURE_AMD_PPIN (13*32+23) /* "amd_ppin" Protected Processor Inventory Number */ > #define X86_FEATURE_AMD_SSBD (13*32+24) /* Speculative Store Bypass Disable */ > #define X86_FEATURE_VIRT_SSBD (13*32+25) /* "virt_ssbd" Virtualized Speculative Store Bypass Disable */ > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > index e2836a255b16..4823970611fd 100644 > --- a/arch/x86/kvm/cpuid.c > +++ b/arch/x86/kvm/cpuid.c > @@ -1096,6 +1096,7 @@ void kvm_set_cpu_caps(void) > F(AMD_STIBP), > F(AMD_STIBP_ALWAYS_ON), > F(AMD_IBRS_SAME_MODE), > + F(EFER_LMSLE_MBZ), > F(AMD_PSFD), > F(AMD_IBPB_RET), > ); > -- > 2.51.0.618.g983fd99d29-goog > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/2] KVM: x86: Advertise EferLmsleUnsupported to userspace 2025-10-01 0:14 ` [PATCH v2 1/2] KVM: x86: Advertise EferLmsleUnsupported to userspace Jim Mattson 2025-10-01 15:17 ` Yosry Ahmed @ 2025-10-07 7:59 ` Nikunj A Dadhania 2025-10-14 22:49 ` Sean Christopherson 2 siblings, 0 replies; 10+ messages in thread From: Nikunj A Dadhania @ 2025-10-07 7:59 UTC (permalink / raw) To: Jim Mattson, Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, Sean Christopherson, Paolo Bonzini, Pawan Gupta, Tom Lendacky, Jim Mattson, Perry Yuan, Sohil Mehta, Xin Li (Intel), Joerg Roedel, Avi Kivity, linux-kernel, kvm, Yosry Ahmed Jim Mattson <jmattson@google.com> writes: > CPUID.80000008H:EBX.EferLmsleUnsupported[bit 20] is a defeature > bit. When this bit is clear, EFER.LMSLE is supported. When this bit is > set, EFER.LMLSE is unsupported. KVM has never supported EFER.LMSLE, so > it cannot support a 0-setting of this bit. > > Pass through the bit in KVM_GET_SUPPORTED_CPUID to advertise the > unavailability of EFER.LMSLE to userspace. > > Signed-off-by: Jim Mattson <jmattson@google.com> Reviewed-by: Nikunj A Dadhania <nikunj@amd.com> > --- > v1 -> v2: > Pass through the bit from hardware, rather than forcing it to be set. > > arch/x86/include/asm/cpufeatures.h | 1 + > arch/x86/kvm/cpuid.c | 1 + > 2 files changed, 2 insertions(+) > > diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h > index 751ca35386b0..f9b593721917 100644 > --- a/arch/x86/include/asm/cpufeatures.h > +++ b/arch/x86/include/asm/cpufeatures.h > @@ -338,6 +338,7 @@ > #define X86_FEATURE_AMD_STIBP (13*32+15) /* Single Thread Indirect Branch Predictors */ > #define X86_FEATURE_AMD_STIBP_ALWAYS_ON (13*32+17) /* Single Thread Indirect Branch Predictors always-on preferred */ > #define X86_FEATURE_AMD_IBRS_SAME_MODE (13*32+19) /* Indirect Branch Restricted Speculation same mode protection*/ > +#define X86_FEATURE_EFER_LMSLE_MBZ (13*32+20) /* EFER.LMSLE must be zero */ > #define X86_FEATURE_AMD_PPIN (13*32+23) /* "amd_ppin" Protected Processor Inventory Number */ > #define X86_FEATURE_AMD_SSBD (13*32+24) /* Speculative Store Bypass Disable */ > #define X86_FEATURE_VIRT_SSBD (13*32+25) /* "virt_ssbd" Virtualized Speculative Store Bypass Disable */ > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > index e2836a255b16..4823970611fd 100644 > --- a/arch/x86/kvm/cpuid.c > +++ b/arch/x86/kvm/cpuid.c > @@ -1096,6 +1096,7 @@ void kvm_set_cpu_caps(void) > F(AMD_STIBP), > F(AMD_STIBP_ALWAYS_ON), > F(AMD_IBRS_SAME_MODE), > + F(EFER_LMSLE_MBZ), > F(AMD_PSFD), > F(AMD_IBPB_RET), > ); > -- > 2.51.0.618.g983fd99d29-goog ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/2] KVM: x86: Advertise EferLmsleUnsupported to userspace 2025-10-01 0:14 ` [PATCH v2 1/2] KVM: x86: Advertise EferLmsleUnsupported to userspace Jim Mattson 2025-10-01 15:17 ` Yosry Ahmed 2025-10-07 7:59 ` Nikunj A Dadhania @ 2025-10-14 22:49 ` Sean Christopherson 2 siblings, 0 replies; 10+ messages in thread From: Sean Christopherson @ 2025-10-14 22:49 UTC (permalink / raw) To: Jim Mattson Cc: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, Paolo Bonzini, Pawan Gupta, Tom Lendacky, Perry Yuan, Sohil Mehta, Xin Li (Intel), Joerg Roedel, Avi Kivity, linux-kernel, kvm, Yosry Ahmed On Tue, Sep 30, 2025, Jim Mattson wrote: > CPUID.80000008H:EBX.EferLmsleUnsupported[bit 20] is a defeature > bit. When this bit is clear, EFER.LMSLE is supported. When this bit is > set, EFER.LMLSE is unsupported. KVM has never supported EFER.LMSLE, so > it cannot support a 0-setting of this bit. > > Pass through the bit in KVM_GET_SUPPORTED_CPUID to advertise the > unavailability of EFER.LMSLE to userspace. This really needs to capture the discussion/context from v1. Without that, saying the KVM "has never supported" LMSLE and then _partially_ disabling LSMLE is all kinds of confusing. > Signed-off-by: Jim Mattson <jmattson@google.com> > --- > v1 -> v2: > Pass through the bit from hardware, rather than forcing it to be set. > > arch/x86/include/asm/cpufeatures.h | 1 + > arch/x86/kvm/cpuid.c | 1 + > 2 files changed, 2 insertions(+) > > diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h > index 751ca35386b0..f9b593721917 100644 > --- a/arch/x86/include/asm/cpufeatures.h > +++ b/arch/x86/include/asm/cpufeatures.h > @@ -338,6 +338,7 @@ > #define X86_FEATURE_AMD_STIBP (13*32+15) /* Single Thread Indirect Branch Predictors */ > #define X86_FEATURE_AMD_STIBP_ALWAYS_ON (13*32+17) /* Single Thread Indirect Branch Predictors always-on preferred */ > #define X86_FEATURE_AMD_IBRS_SAME_MODE (13*32+19) /* Indirect Branch Restricted Speculation same mode protection*/ > +#define X86_FEATURE_EFER_LMSLE_MBZ (13*32+20) /* EFER.LMSLE must be zero */ > #define X86_FEATURE_AMD_PPIN (13*32+23) /* "amd_ppin" Protected Processor Inventory Number */ > #define X86_FEATURE_AMD_SSBD (13*32+24) /* Speculative Store Bypass Disable */ > #define X86_FEATURE_VIRT_SSBD (13*32+25) /* "virt_ssbd" Virtualized Speculative Store Bypass Disable */ > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > index e2836a255b16..4823970611fd 100644 > --- a/arch/x86/kvm/cpuid.c > +++ b/arch/x86/kvm/cpuid.c > @@ -1096,6 +1096,7 @@ void kvm_set_cpu_caps(void) > F(AMD_STIBP), > F(AMD_STIBP_ALWAYS_ON), > F(AMD_IBRS_SAME_MODE), > + F(EFER_LMSLE_MBZ), Do we want to make this PASSTHROUGH_F()? I.e. explicitly ignore any host manipulations of CPUID state? I can't imagine the kernel would ever clear the bit, but I also don't see any downside to being paranoid. This is what I have locally and will apply unless someone objects. --- From: Jim Mattson <jmattson@google.com> Date: Tue, 30 Sep 2025 17:14:07 -0700 Subject: [PATCH] KVM: x86: Advertise EferLmsleUnsupported to userspace CPUID.80000008H:EBX.EferLmsleUnsupported[bit 20] is a defeature bit. When this bit is clear, EFER.LMSLE is supported. When this bit is set, EFER.LMLSE is unsupported. KVM has never _emulated_ EFER.LMSLE, so KVM cannot truly support a 0-setting of this bit. However, KVM has allowed the guest to enable EFER.LMSLE in hardware since commit eec4b140c924 ("KVM: SVM: Allow EFER.LMSLE to be set with nested svm"), i.e. KVM partially virtualizes long-mode segment limits _if_ they are supported by the underlying hardware. Pass through the bit in KVM_GET_SUPPORTED_CPUID to advertise the unavailability of EFER.LMSLE to userspace based on the raw underlying hardware. Attempting to enable EFER.LSMLE on such CPUs simply doesn't work, e.g. immediately crashes on VMRUN. Signed-off-by: Jim Mattson <jmattson@google.com> Reviewed-by: Nikunj A Dadhania <nikunj@amd.com> Reviewed-by: Yosry Ahmed <yosry.ahmed@linux.dev> Link: https://lore.kernel.org/r/20251001001529.1119031-2-jmattson@google.com [sean: add context about partial virtualization, use PASSTHROUGH_F] Signed-off-by: Sean Christopherson <seanjc@google.com> --- arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/kvm/cpuid.c | 1 + 2 files changed, 2 insertions(+) diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h index 4091a776e37a..6bdf868c8f8e 100644 --- a/arch/x86/include/asm/cpufeatures.h +++ b/arch/x86/include/asm/cpufeatures.h @@ -338,6 +338,7 @@ #define X86_FEATURE_AMD_STIBP (13*32+15) /* Single Thread Indirect Branch Predictors */ #define X86_FEATURE_AMD_STIBP_ALWAYS_ON (13*32+17) /* Single Thread Indirect Branch Predictors always-on preferred */ #define X86_FEATURE_AMD_IBRS_SAME_MODE (13*32+19) /* Indirect Branch Restricted Speculation same mode protection*/ +#define X86_FEATURE_EFER_LMSLE_MBZ (13*32+20) /* EFER.LMSLE must be zero */ #define X86_FEATURE_AMD_PPIN (13*32+23) /* "amd_ppin" Protected Processor Inventory Number */ #define X86_FEATURE_AMD_SSBD (13*32+24) /* Speculative Store Bypass Disable */ #define X86_FEATURE_VIRT_SSBD (13*32+25) /* "virt_ssbd" Virtualized Speculative Store Bypass Disable */ diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index 52524e0ca97f..d563a948318b 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -1135,6 +1135,7 @@ void kvm_set_cpu_caps(void) F(AMD_STIBP), F(AMD_STIBP_ALWAYS_ON), F(AMD_IBRS_SAME_MODE), + PASSTHROUGH_F(EFER_LMSLE_MBZ), F(AMD_PSFD), F(AMD_IBPB_RET), ); base-commit: 7c8b465a1c91f674655ea9cec5083744ec5f796a -- ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 2/2] KVM: SVM: Disallow EFER.LMSLE when not supported by hardware 2025-10-01 0:14 [PATCH v2 0/2] KVM: SVM: Handle EferLmsleUnsupported Jim Mattson 2025-10-01 0:14 ` [PATCH v2 1/2] KVM: x86: Advertise EferLmsleUnsupported to userspace Jim Mattson @ 2025-10-01 0:14 ` Jim Mattson 2025-10-01 15:18 ` Yosry Ahmed ` (2 more replies) 2025-10-20 16:33 ` [PATCH v2 0/2] KVM: SVM: Handle EferLmsleUnsupported Sean Christopherson 2 siblings, 3 replies; 10+ messages in thread From: Jim Mattson @ 2025-10-01 0:14 UTC (permalink / raw) To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, Sean Christopherson, Paolo Bonzini, Pawan Gupta, Tom Lendacky, Jim Mattson, Perry Yuan, Sohil Mehta, Xin Li (Intel), Joerg Roedel, Avi Kivity, linux-kernel, kvm, Yosry Ahmed Modern AMD CPUs do not support segment limit checks in 64-bit mode (i.e. EFER.LMSLE must be zero). Do not allow a guest to set EFER.LMSLE on a CPU that requires the bit to be zero. For backwards compatibility, allow EFER.LMSLE to be set on CPUs that support segment limit checks in 64-bit mode, even though KVM's implementation of the feature is incomplete (e.g. KVM's emulator does not enforce segment limits in 64-bit mode). Fixes: eec4b140c924 ("KVM: SVM: Allow EFER.LMSLE to be set with nested svm") Signed-off-by: Jim Mattson <jmattson@google.com> --- arch/x86/kvm/svm/svm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 1bfebe40854f..78d0fc85d0bd 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -5351,7 +5351,9 @@ static __init int svm_hardware_setup(void) if (nested) { pr_info("Nested Virtualization enabled\n"); - kvm_enable_efer_bits(EFER_SVME | EFER_LMSLE); + kvm_enable_efer_bits(EFER_SVME); + if (!boot_cpu_has(X86_FEATURE_EFER_LMSLE_MBZ)) + kvm_enable_efer_bits(EFER_LMSLE); r = nested_svm_init_msrpm_merge_offsets(); if (r) -- 2.51.0.618.g983fd99d29-goog ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/2] KVM: SVM: Disallow EFER.LMSLE when not supported by hardware 2025-10-01 0:14 ` [PATCH v2 2/2] KVM: SVM: Disallow EFER.LMSLE when not supported by hardware Jim Mattson @ 2025-10-01 15:18 ` Yosry Ahmed 2025-10-01 15:25 ` Yosry Ahmed 2025-10-07 8:02 ` Nikunj A Dadhania 2 siblings, 0 replies; 10+ messages in thread From: Yosry Ahmed @ 2025-10-01 15:18 UTC (permalink / raw) To: Jim Mattson Cc: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, Sean Christopherson, Paolo Bonzini, Pawan Gupta, Tom Lendacky, Perry Yuan, Sohil Mehta, Xin Li (Intel), Joerg Roedel, Avi Kivity, linux-kernel, kvm On Tue, Sep 30, 2025 at 05:14:08PM -0700, Jim Mattson wrote: > Modern AMD CPUs do not support segment limit checks in 64-bit mode > (i.e. EFER.LMSLE must be zero). Do not allow a guest to set EFER.LMSLE > on a CPU that requires the bit to be zero. > > For backwards compatibility, allow EFER.LMSLE to be set on CPUs that > support segment limit checks in 64-bit mode, even though KVM's > implementation of the feature is incomplete (e.g. KVM's emulator does > not enforce segment limits in 64-bit mode). > > Fixes: eec4b140c924 ("KVM: SVM: Allow EFER.LMSLE to be set with nested svm") > > Signed-off-by: Jim Mattson <jmattson@google.com> Reviewed-by: Yosry Ahmed <yosry.ahmed@linux.dev> > --- > arch/x86/kvm/svm/svm.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c > index 1bfebe40854f..78d0fc85d0bd 100644 > --- a/arch/x86/kvm/svm/svm.c > +++ b/arch/x86/kvm/svm/svm.c > @@ -5351,7 +5351,9 @@ static __init int svm_hardware_setup(void) > > if (nested) { > pr_info("Nested Virtualization enabled\n"); > - kvm_enable_efer_bits(EFER_SVME | EFER_LMSLE); > + kvm_enable_efer_bits(EFER_SVME); > + if (!boot_cpu_has(X86_FEATURE_EFER_LMSLE_MBZ)) > + kvm_enable_efer_bits(EFER_LMSLE); > > r = nested_svm_init_msrpm_merge_offsets(); > if (r) > -- > 2.51.0.618.g983fd99d29-goog > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/2] KVM: SVM: Disallow EFER.LMSLE when not supported by hardware 2025-10-01 0:14 ` [PATCH v2 2/2] KVM: SVM: Disallow EFER.LMSLE when not supported by hardware Jim Mattson 2025-10-01 15:18 ` Yosry Ahmed @ 2025-10-01 15:25 ` Yosry Ahmed 2025-10-07 8:02 ` Nikunj A Dadhania 2 siblings, 0 replies; 10+ messages in thread From: Yosry Ahmed @ 2025-10-01 15:25 UTC (permalink / raw) To: Jim Mattson Cc: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, Sean Christopherson, Paolo Bonzini, Pawan Gupta, Tom Lendacky, Perry Yuan, Sohil Mehta, Xin Li (Intel), Joerg Roedel, Avi Kivity, linux-kernel, kvm On Tue, Sep 30, 2025 at 05:14:08PM -0700, Jim Mattson wrote: > Modern AMD CPUs do not support segment limit checks in 64-bit mode > (i.e. EFER.LMSLE must be zero). Do not allow a guest to set EFER.LMSLE > on a CPU that requires the bit to be zero. If anyone is as curious as I was, the bit seemingly started being set on Milan. Rome (and supposedly older CPUs) support EFER.LMSLE. > > For backwards compatibility, allow EFER.LMSLE to be set on CPUs that > support segment limit checks in 64-bit mode, even though KVM's > implementation of the feature is incomplete (e.g. KVM's emulator does > not enforce segment limits in 64-bit mode). > > Fixes: eec4b140c924 ("KVM: SVM: Allow EFER.LMSLE to be set with nested svm") > > Signed-off-by: Jim Mattson <jmattson@google.com> > --- > arch/x86/kvm/svm/svm.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c > index 1bfebe40854f..78d0fc85d0bd 100644 > --- a/arch/x86/kvm/svm/svm.c > +++ b/arch/x86/kvm/svm/svm.c > @@ -5351,7 +5351,9 @@ static __init int svm_hardware_setup(void) > > if (nested) { > pr_info("Nested Virtualization enabled\n"); > - kvm_enable_efer_bits(EFER_SVME | EFER_LMSLE); > + kvm_enable_efer_bits(EFER_SVME); > + if (!boot_cpu_has(X86_FEATURE_EFER_LMSLE_MBZ)) > + kvm_enable_efer_bits(EFER_LMSLE); > > r = nested_svm_init_msrpm_merge_offsets(); > if (r) > -- > 2.51.0.618.g983fd99d29-goog > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/2] KVM: SVM: Disallow EFER.LMSLE when not supported by hardware 2025-10-01 0:14 ` [PATCH v2 2/2] KVM: SVM: Disallow EFER.LMSLE when not supported by hardware Jim Mattson 2025-10-01 15:18 ` Yosry Ahmed 2025-10-01 15:25 ` Yosry Ahmed @ 2025-10-07 8:02 ` Nikunj A Dadhania 2 siblings, 0 replies; 10+ messages in thread From: Nikunj A Dadhania @ 2025-10-07 8:02 UTC (permalink / raw) To: Jim Mattson, Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, Sean Christopherson, Paolo Bonzini, Pawan Gupta, Tom Lendacky, Jim Mattson, Perry Yuan, Sohil Mehta, Xin Li (Intel), Joerg Roedel, Avi Kivity, linux-kernel, kvm, Yosry Ahmed Jim Mattson <jmattson@google.com> writes: > Modern AMD CPUs do not support segment limit checks in 64-bit mode > (i.e. EFER.LMSLE must be zero). Do not allow a guest to set EFER.LMSLE > on a CPU that requires the bit to be zero. > > For backwards compatibility, allow EFER.LMSLE to be set on CPUs that > support segment limit checks in 64-bit mode, even though KVM's > implementation of the feature is incomplete (e.g. KVM's emulator does > not enforce segment limits in 64-bit mode). > > Fixes: eec4b140c924 ("KVM: SVM: Allow EFER.LMSLE to be set with nested svm") > > Signed-off-by: Jim Mattson <jmattson@google.com> Reviewed-by: Nikunj A Dadhania <nikunj@amd.com> > --- > arch/x86/kvm/svm/svm.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c > index 1bfebe40854f..78d0fc85d0bd 100644 > --- a/arch/x86/kvm/svm/svm.c > +++ b/arch/x86/kvm/svm/svm.c > @@ -5351,7 +5351,9 @@ static __init int svm_hardware_setup(void) > > if (nested) { > pr_info("Nested Virtualization enabled\n"); > - kvm_enable_efer_bits(EFER_SVME | EFER_LMSLE); > + kvm_enable_efer_bits(EFER_SVME); > + if (!boot_cpu_has(X86_FEATURE_EFER_LMSLE_MBZ)) > + kvm_enable_efer_bits(EFER_LMSLE); > > r = nested_svm_init_msrpm_merge_offsets(); > if (r) > -- > 2.51.0.618.g983fd99d29-goog ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 0/2] KVM: SVM: Handle EferLmsleUnsupported 2025-10-01 0:14 [PATCH v2 0/2] KVM: SVM: Handle EferLmsleUnsupported Jim Mattson 2025-10-01 0:14 ` [PATCH v2 1/2] KVM: x86: Advertise EferLmsleUnsupported to userspace Jim Mattson 2025-10-01 0:14 ` [PATCH v2 2/2] KVM: SVM: Disallow EFER.LMSLE when not supported by hardware Jim Mattson @ 2025-10-20 16:33 ` Sean Christopherson 2 siblings, 0 replies; 10+ messages in thread From: Sean Christopherson @ 2025-10-20 16:33 UTC (permalink / raw) To: Sean Christopherson, Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86, H. Peter Anvin, Paolo Bonzini, Pawan Gupta, Tom Lendacky, Perry Yuan, Sohil Mehta, Xin Li (Intel), Joerg Roedel, Avi Kivity, linux-kernel, kvm, Yosry Ahmed, Jim Mattson On Tue, 30 Sep 2025 17:14:06 -0700, Jim Mattson wrote: > It is no longer the case that EFER.LMSLE is supported by all SVM-capable > processors. AMD enumerates the absence of this feature by CPUID > Fn8000_0008_EBX[EferLmlseUnsupported](bit 20)=1. > > Advertise this defeature bit to userspace via KVM_GET_SUPPORTED_CPUID, > and don't allow a guest to set EFER.LMSLE on hardware that doesn't > support the feature. > > [...] Applied to kvm-x86 svm, thanks! [1/2] KVM: x86: Advertise EferLmsleUnsupported to userspace https://github.com/kvm-x86/linux/commit/4793f990ea15 [2/2] KVM: SVM: Disallow EFER.LMSLE when not supported by hardware https://github.com/kvm-x86/linux/commit/c53c632592a4 -- https://github.com/kvm-x86/linux/tree/next ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2025-10-20 16:34 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-10-01 0:14 [PATCH v2 0/2] KVM: SVM: Handle EferLmsleUnsupported Jim Mattson 2025-10-01 0:14 ` [PATCH v2 1/2] KVM: x86: Advertise EferLmsleUnsupported to userspace Jim Mattson 2025-10-01 15:17 ` Yosry Ahmed 2025-10-07 7:59 ` Nikunj A Dadhania 2025-10-14 22:49 ` Sean Christopherson 2025-10-01 0:14 ` [PATCH v2 2/2] KVM: SVM: Disallow EFER.LMSLE when not supported by hardware Jim Mattson 2025-10-01 15:18 ` Yosry Ahmed 2025-10-01 15:25 ` Yosry Ahmed 2025-10-07 8:02 ` Nikunj A Dadhania 2025-10-20 16:33 ` [PATCH v2 0/2] KVM: SVM: Handle EferLmsleUnsupported Sean Christopherson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox