Commit e55d98e7 authored by Borislav Petkov (AMD)'s avatar Borislav Petkov (AMD) Committed by Linus Torvalds
Browse files

x86/CPU: Fix FPDSS on Zen1



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: default avatarBorislav Petkov (AMD) <bp@alien8.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 43cfbdda
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -674,6 +674,9 @@
#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)
+3 −0
Original line number Diff line number Diff line
@@ -944,6 +944,9 @@ static void init_amd_zen1(struct cpuinfo_x86 *c)
		msr_clear_bit(MSR_K7_HWCR, MSR_K7_HWCR_IRPERF_EN_BIT);
		clear_cpu_cap(c, X86_FEATURE_IRPERF);
	}

	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 const struct x86_cpu_id amd_zenbleed_microcode[] = {