All of lore.kernel.org
 help / color / mirror / Atom feed
From: "tip-bot2 for Josh Poimboeuf" <tip-bot2@linutronix.de>
To: linux-tip-commits@vger.kernel.org
Cc: Josh Poimboeuf <jpoimboe@kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	"Borislav Petkov (AMD)" <bp@alien8.de>,
	x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [tip: x86/bugs] x86/srso: Fix vulnerability reporting for missing microcode
Date: Tue, 05 Sep 2023 10:09:37 -0000	[thread overview]
Message-ID: <169390857784.27769.8542911288058791596.tip-bot2@tip-bot2> (raw)
In-Reply-To: <a8a14f97d1b0e03ec255c81637afdf4cf0ae9c99.1693889988.git.jpoimboe@kernel.org>

The following commit has been merged into the x86/bugs branch of tip:

Commit-ID:     534be1d0ecfa327cda06fd9e556b2f56062da3d7
Gitweb:        https://git.kernel.org/tip/534be1d0ecfa327cda06fd9e556b2f56062da3d7
Author:        Josh Poimboeuf <jpoimboe@kernel.org>
AuthorDate:    Mon, 04 Sep 2023 22:04:52 -07:00
Committer:     Ingo Molnar <mingo@kernel.org>
CommitterDate: Tue, 05 Sep 2023 12:05:07 +02:00

x86/srso: Fix vulnerability reporting for missing microcode

The SRSO default safe-ret mitigation is reported as "mitigated" even if
microcode hasn't been updated.  That's wrong because userspace may still
be vulnerable to SRSO attacks due to IBPB not flushing branch type
predictions.

Report the safe-ret + !microcode case as vulnerable.

Also report the microcode-only case as vulnerable as it leaves the
kernel open to attacks.

Fixes: fb3bd914b3ec ("x86/srso: Add a Speculative RAS Overflow mitigation")
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/a8a14f97d1b0e03ec255c81637afdf4cf0ae9c99.1693889988.git.jpoimboe@kernel.org
---
 Documentation/admin-guide/hw-vuln/srso.rst | 24 +++++++++-----
 arch/x86/kernel/cpu/bugs.c                 | 36 ++++++++++++---------
 2 files changed, 39 insertions(+), 21 deletions(-)

diff --git a/Documentation/admin-guide/hw-vuln/srso.rst b/Documentation/admin-guide/hw-vuln/srso.rst
index b6cfb51..e715bfc 100644
--- a/Documentation/admin-guide/hw-vuln/srso.rst
+++ b/Documentation/admin-guide/hw-vuln/srso.rst
@@ -46,12 +46,22 @@ The possible values in this file are:
 
    The processor is not vulnerable
 
- * 'Vulnerable: no microcode':
+* 'Vulnerable':
+
+   The processor is vulnerable and no mitigations have been applied.
+
+ * 'Vulnerable: No microcode':
 
    The processor is vulnerable, no microcode extending IBPB
    functionality to address the vulnerability has been applied.
 
- * 'Mitigation: microcode':
+ * 'Vulnerable: Safe RET, no microcode':
+
+   The "Safe RET" mitigation (see below) has been applied to protect the
+   kernel, but the IBPB-extending microcode has not been applied.  User
+   space tasks may still be vulnerable.
+
+ * 'Vulnerable: Microcode, no safe RET':
 
    Extended IBPB functionality microcode patch has been applied. It does
    not address User->Kernel and Guest->Host transitions protection but it
@@ -72,11 +82,11 @@ The possible values in this file are:
 
    (spec_rstack_overflow=microcode)
 
- * 'Mitigation: safe RET':
+ * 'Mitigation: Safe RET':
 
-   Software-only mitigation. It complements the extended IBPB microcode
-   patch functionality by addressing User->Kernel and Guest->Host
-   transitions protection.
+   Combined microcode/software mitigation. It complements the
+   extended IBPB microcode patch functionality by addressing
+   User->Kernel and Guest->Host transitions protection.
 
    Selected by default or by spec_rstack_overflow=safe-ret
 
@@ -129,7 +139,7 @@ an indrect branch prediction barrier after having applied the required
 microcode patch for one's system. This mitigation comes also at
 a performance cost.
 
-Mitigation: safe RET
+Mitigation: Safe RET
 --------------------
 
 The mitigation works by ensuring all RET instructions speculate to
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
index 6c47f37..e45dd69 100644
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -2353,6 +2353,8 @@ early_param("l1tf", l1tf_cmdline);
 
 enum srso_mitigation {
 	SRSO_MITIGATION_NONE,
+	SRSO_MITIGATION_UCODE_NEEDED,
+	SRSO_MITIGATION_SAFE_RET_UCODE_NEEDED,
 	SRSO_MITIGATION_MICROCODE,
 	SRSO_MITIGATION_SAFE_RET,
 	SRSO_MITIGATION_IBPB,
@@ -2368,11 +2370,13 @@ enum srso_mitigation_cmd {
 };
 
 static const char * const srso_strings[] = {
-	[SRSO_MITIGATION_NONE]           = "Vulnerable",
-	[SRSO_MITIGATION_MICROCODE]      = "Mitigation: microcode",
-	[SRSO_MITIGATION_SAFE_RET]	 = "Mitigation: safe RET",
-	[SRSO_MITIGATION_IBPB]		 = "Mitigation: IBPB",
-	[SRSO_MITIGATION_IBPB_ON_VMEXIT] = "Mitigation: IBPB on VMEXIT only"
+	[SRSO_MITIGATION_NONE]			= "Vulnerable",
+	[SRSO_MITIGATION_UCODE_NEEDED]		= "Vulnerable: No microcode",
+	[SRSO_MITIGATION_SAFE_RET_UCODE_NEEDED]	= "Vulnerable: Safe RET, no microcode",
+	[SRSO_MITIGATION_MICROCODE]		= "Vulnerable: Microcode, no safe RET",
+	[SRSO_MITIGATION_SAFE_RET]		= "Mitigation: Safe RET",
+	[SRSO_MITIGATION_IBPB]			= "Mitigation: IBPB",
+	[SRSO_MITIGATION_IBPB_ON_VMEXIT]	= "Mitigation: IBPB on VMEXIT only"
 };
 
 static enum srso_mitigation srso_mitigation __ro_after_init = SRSO_MITIGATION_NONE;
@@ -2409,10 +2413,7 @@ static void __init srso_select_mitigation(void)
 	if (!boot_cpu_has_bug(X86_BUG_SRSO) || cpu_mitigations_off())
 		goto pred_cmd;
 
-	if (!has_microcode) {
-		pr_warn("IBPB-extending microcode not applied!\n");
-		pr_warn(SRSO_NOTICE);
-	} else {
+	if (has_microcode) {
 		/*
 		 * Zen1/2 with SMT off aren't vulnerable after the right
 		 * IBPB microcode has been applied.
@@ -2428,6 +2429,12 @@ static void __init srso_select_mitigation(void)
 			srso_mitigation = SRSO_MITIGATION_IBPB;
 			goto out;
 		}
+	} else {
+		pr_warn("IBPB-extending microcode not applied!\n");
+		pr_warn(SRSO_NOTICE);
+
+		/* may be overwritten by SRSO_CMD_SAFE_RET below */
+		srso_mitigation = SRSO_MITIGATION_UCODE_NEEDED;
 	}
 
 	switch (srso_cmd) {
@@ -2457,7 +2464,10 @@ static void __init srso_select_mitigation(void)
 				setup_force_cpu_cap(X86_FEATURE_SRSO);
 				x86_return_thunk = srso_return_thunk;
 			}
-			srso_mitigation = SRSO_MITIGATION_SAFE_RET;
+			if (has_microcode)
+				srso_mitigation = SRSO_MITIGATION_SAFE_RET;
+			else
+				srso_mitigation = SRSO_MITIGATION_SAFE_RET_UCODE_NEEDED;
 		} else {
 			pr_err("WARNING: kernel not compiled with CPU_SRSO.\n");
 		}
@@ -2490,7 +2500,7 @@ static void __init srso_select_mitigation(void)
 	}
 
 out:
-	pr_info("%s%s\n", srso_strings[srso_mitigation], has_microcode ? "" : ", no microcode");
+	pr_info("%s\n", srso_strings[srso_mitigation]);
 
 pred_cmd:
 	if ((!boot_cpu_has_bug(X86_BUG_SRSO) || srso_cmd == SRSO_CMD_OFF) &&
@@ -2701,9 +2711,7 @@ static ssize_t srso_show_state(char *buf)
 	if (boot_cpu_has(X86_FEATURE_SRSO_NO))
 		return sysfs_emit(buf, "Mitigation: SMT disabled\n");
 
-	return sysfs_emit(buf, "%s%s\n",
-			  srso_strings[srso_mitigation],
-			  boot_cpu_has(X86_FEATURE_IBPB_BRTYPE) ? "" : ", no microcode");
+	return sysfs_emit(buf, "%s\n", srso_strings[srso_mitigation]);
 }
 
 static ssize_t gds_show_state(char *buf)

  reply	other threads:[~2023-09-05 16:24 UTC|newest]

Thread overview: 98+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-05  5:04 [PATCH v3 00/20] SRSO fixes/cleanups Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 01/20] x86/srso: Fix srso_show_state() side effect Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:45   ` [tip: x86/urgent] " tip-bot2 for Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 02/20] x86/srso: Set CPUID feature bits independently of bug or mitigation status Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:45   ` [tip: x86/urgent] " tip-bot2 for Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 03/20] x86/srso: Don't probe microcode in a guest Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:45   ` [tip: x86/urgent] " tip-bot2 for Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 04/20] x86/srso: Fix SBPB enablement for spec_rstack_overflow=off Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:45   ` [tip: x86/urgent] " tip-bot2 for Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 05/20] x86/srso: Fix SBPB enablement for (possible) future fixed HW Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-10-20 11:37   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 06/20] x86/srso: Print actual mitigation if requested mitigation isn't possible Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-10-20 11:37   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 07/20] x86/srso: Print mitigation for retbleed IBPB case Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-10-20 11:37   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 08/20] x86/srso: Fix vulnerability reporting for missing microcode Josh Poimboeuf
2023-09-05 10:09   ` tip-bot2 for Josh Poimboeuf [this message]
2023-09-19  9:53   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-10-20 11:37   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 09/20] x86/srso: Fix unret validation dependencies Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-10-20 11:37   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 10/20] x86/alternatives: Remove faulty optimization Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 11/20] x86/srso: Improve i-cache locality for alias mitigation Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-10-20 11:37   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 12/20] x86/srso: Unexport untraining functions Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-10-20 11:37   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 13/20] x86/srso: Remove 'pred_cmd' label Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-10-20 11:37   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 14/20] x86/bugs: Remove default case for fully switched enums Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-10-20 11:37   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:04 ` [PATCH v3 15/20] x86/srso: Move retbleed IBPB check into existing 'has_microcode' code block Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-10-20 11:37   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:05 ` [PATCH v3 16/20] x86/srso: Disentangle rethunk-dependent options Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-10-20 11:37   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:05 ` [PATCH v3 17/20] x86/rethunk: Use SYM_CODE_START[_LOCAL]_NOALIGN macros Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-10-20 11:37   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:05 ` [PATCH v3 18/20] x86/retpoline: Remove .text..__x86.return_thunk section Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:05 ` [PATCH v3 19/20] x86/nospec: Refactor UNTRAIN_RET[_*] Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-10-20 11:37   ` tip-bot2 for Josh Poimboeuf
2023-09-05  5:05 ` [PATCH v3 20/20] x86/calldepth: Rename __x86_return_skl() to call_depth_return_thunk() Josh Poimboeuf
2023-09-05 10:09   ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-19  9:53   ` tip-bot2 for Josh Poimboeuf
2023-09-23 12:20   ` tip-bot2 for Josh Poimboeuf
2023-10-20 11:37   ` tip-bot2 for Josh Poimboeuf
2023-09-05  6:35 ` [PATCH v3 00/20] SRSO fixes/cleanups Borislav Petkov
2023-09-05 10:02   ` Ingo Molnar
  -- strict thread matches above, loose matches on Subject: below --
2023-08-25  7:01 [PATCH 10/23] x86/srso: Fix vulnerability reporting for missing microcode Josh Poimboeuf
2023-08-25 10:19 ` [tip: x86/bugs] " tip-bot2 for Josh Poimboeuf
2023-09-01  9:40   ` Borislav Petkov
2023-09-02 10:46     ` Ingo Molnar
2023-09-02 17:04       ` Borislav Petkov
2023-09-03 14:37         ` Borislav Petkov
2023-09-05  4:57       ` Josh Poimboeuf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=169390857784.27769.8542911288058791596.tip-bot2@tip-bot2 \
    --to=tip-bot2@linutronix.de \
    --cc=bp@alien8.de \
    --cc=jpoimboe@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.