KVM incorrectly synthesizes TSA_SQ_NO and TSA_L1_NO when running on AMD Family 19h CPUs by using SYNTHESIZED_F(), which unconditionally enables features for KVM-only CPUID leaves (as is the case with CPUID_8000_0021_ECX), regardless of the kernel's synthesis logic in tsa_init(). This is due to the following logic in kvm_cpu_cap_init(): if (leaf < NCAPINTS) kvm_cpu_caps[leaf] &= kernel_cpu_caps[leaf]; This can cause an unexpected failure on Family 19h CPUs during SEV-SNP guest setup, when userspace issues SNP_LAUNCH_UPDATE, as setting these bits in the CPUID page on vulnerable CPUs is explicitly rejected by SNP firmware. Switch to SCATTERED_F(), so that the bits are only set if the features have been force-set by the kernel in tsa_init(), or if they are reported in the raw CPUID. Fixes: 31272abd5974 ("KVM: SVM: Advertise TSA CPUID bits to guests") Signed-off-by: Carlos López --- arch/x86/kvm/cpuid.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index 88a5426674a1..819c176e02ff 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -1230,8 +1230,8 @@ void kvm_set_cpu_caps(void) ); kvm_cpu_cap_init(CPUID_8000_0021_ECX, - SYNTHESIZED_F(TSA_SQ_NO), - SYNTHESIZED_F(TSA_L1_NO), + SCATTERED_F(TSA_SQ_NO), + SCATTERED_F(TSA_L1_NO), ); kvm_cpu_cap_init(CPUID_8000_0022_EAX, base-commit: 0de4a0eec25b9171f2a2abb1a820e125e6797770 -- 2.51.0