Borislav Petkov ce4a75
From: Josh Poimboeuf <jpoimboe@kernel.org>
Borislav Petkov ce4a75
Date: Tue, 14 Jun 2022 15:07:19 -0700
Borislav Petkov ce4a75
Subject: x86/bugs: Do IBPB fallback check only once
Borislav Petkov ce4a75
Git-commit: 0fe4aeea9c01baabecc8c3afc7889c809d939bc2
Borislav Petkov d06c64
Patch-mainline: v5.19-rc4
Borislav Petkov ce4a75
References: bsc#1199657 CVE-2022-29900 CVE-2022-29901
Borislav Petkov ce4a75
Borislav Petkov ce4a75
When booting with retbleed=auto, if the kernel wasn't built with
Borislav Petkov ce4a75
CONFIG_CC_HAS_RETURN_THUNK, the mitigation falls back to IBPB.  Make
Borislav Petkov ce4a75
sure a warning is printed in that case.  The IBPB fallback check is done
Borislav Petkov ce4a75
twice, but it really only needs to be done once.
Borislav Petkov ce4a75
Borislav Petkov ce4a75
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Borislav Petkov ce4a75
Signed-off-by: Borislav Petkov <bp@suse.de>
Borislav Petkov ce4a75
---
Borislav Petkov ce4a75
 arch/x86/kernel/cpu/bugs.c | 15 +++++----------
Borislav Petkov ce4a75
 1 file changed, 5 insertions(+), 10 deletions(-)
Borislav Petkov ce4a75
Borislav Petkov ce4a75
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
Borislav Petkov ce4a75
index 04077d13b3ae..108bd74289c5 100644
Borislav Petkov ce4a75
--- a/arch/x86/kernel/cpu/bugs.c
Borislav Petkov ce4a75
+++ b/arch/x86/kernel/cpu/bugs.c
Borislav Petkov ce4a75
@@ -891,18 +891,13 @@ static void __init retbleed_select_mitigation(void)
Borislav Petkov ce4a75
 	case RETBLEED_CMD_AUTO:
Borislav Petkov ce4a75
 	default:
Borislav Petkov ce4a75
 		if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD ||
Borislav Petkov ce4a75
-		    boot_cpu_data.x86_vendor == X86_VENDOR_HYGON) {
Borislav Petkov ce4a75
-
Borislav Petkov ce4a75
-			if (IS_ENABLED(CONFIG_RETPOLINE) &&
Borislav Petkov ce4a75
-			    IS_ENABLED(CONFIG_CC_HAS_RETURN_THUNK))
Borislav Petkov ce4a75
-				retbleed_mitigation = RETBLEED_MITIGATION_UNRET;
Borislav Petkov ce4a75
-			else
Borislav Petkov ce4a75
-				retbleed_mitigation = RETBLEED_MITIGATION_IBPB;
Borislav Petkov ce4a75
-		}
Borislav Petkov ce4a75
+		    boot_cpu_data.x86_vendor == X86_VENDOR_HYGON)
Borislav Petkov ce4a75
+			retbleed_mitigation = RETBLEED_MITIGATION_UNRET;
Borislav Petkov ce4a75
 
Borislav Petkov ce4a75
 		/*
Borislav Petkov ce4a75
-		 * The Intel mitigation (IBRS) was already selected in
Borislav Petkov ce4a75
-		 * spectre_v2_select_mitigation().
Borislav Petkov ce4a75
+		 * The Intel mitigation (IBRS or eIBRS) was already selected in
Borislav Petkov ce4a75
+		 * spectre_v2_select_mitigation().  'retbleed_mitigation' will
Borislav Petkov ce4a75
+		 * be set accordingly below.
Borislav Petkov ce4a75
 		 */
Borislav Petkov ce4a75
 
Borislav Petkov ce4a75
 		break;
Borislav Petkov ce4a75