]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
x86/CPU: Fix FPDSS on Zen1
authorBorislav Petkov (AMD) <bp@alien8.de>
Tue, 7 Apr 2026 09:40:03 +0000 (11:40 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 18 Apr 2026 08:35:59 +0000 (10:35 +0200)
commit e55d98e7756135f32150b9b8f75d580d0d4b2dd3 upstream.

Zen1's hardware divider can leave, under certain circumstances, partial
results from previous operations.  Those results can be leaked by
another, attacker thread.

Fix that with a chicken bit.

Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/include/asm/msr-index.h
arch/x86/kernel/cpu/amd.c

index 749e7fe245e6579546b187d2948391dc48992e77..5b8268afc0358c89e0d83ef7ad9a3c6a98fcb740 100644 (file)
 #define MSR_AMD64_DC_CFG               0xc0011022
 #define MSR_AMD64_TW_CFG               0xc0011023
 
+#define MSR_AMD64_FP_CFG               0xc0011028
+#define MSR_AMD64_FP_CFG_ZEN1_DENORM_FIX_BIT   9
+
 #define MSR_AMD64_DE_CFG               0xc0011029
 #define MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT   1
 #define MSR_AMD64_DE_CFG_LFENCE_SERIALIZE      BIT_ULL(MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT)
index 2d71c329b3475c1eb072ded8802d9bec43ba99f5..1ba9fcfde6d20cb276cd5ebb4145d01c4367ec36 100644 (file)
@@ -1051,6 +1051,9 @@ static void init_amd_zn(struct cpuinfo_x86 *c)
                if (c->x86 == 0x19 && !cpu_has(c, X86_FEATURE_BTC_NO))
                        set_cpu_cap(c, X86_FEATURE_BTC_NO);
        }
+
+       pr_notice_once("AMD Zen1 FPDSS bug detected, enabling mitigation.\n");
+       msr_set_bit(MSR_AMD64_FP_CFG, MSR_AMD64_FP_CFG_ZEN1_DENORM_FIX_BIT);
 }
 
 static bool cpu_has_zenbleed_microcode(void)