[PATCH 3/8] x86/microcode: Accept a boolean for force_minrev parameter

From: Chang S. Bae

Date: Tue Sep 01 2026 - 19:45:14 EST


The microcode= command-line option allows controlling all microcode
loading options. However, force_minrev can only enable minimum revision
enforcement, not disable it.

The previous microcode.force_minrev= option accepted both boolean values,
and the current behavior differs from the documentation in
kernel-parameters.txt.

Add `force_minrev=` as a sub-option to explicitly enable or disable the
minimum revision enforcement. Update the documentation accordingly.

While doing so, wrap strsep() in a descriptively named helper.

Fixes: 632ff6170647 ("x86/microcode: Add microcode= cmdline parsing")
Reported-by: Sohil Mehta <sohil.mehta@xxxxxxxxx>
Signed-off-by: Chang S. Bae <chang.seok.bae@xxxxxxxxx>
Cc: <stable@xxxxxxxxxxxxxxx>
---
Documentation/admin-guide/kernel-parameters.txt | 7 ++++---
arch/x86/kernel/cpu/microcode/core.c | 15 ++++++++++++---
2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 68647ff4bdd2..cde092017cd8 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -4071,9 +4071,10 @@ Kernel parameters

dis_ucode_ldr: disable the microcode loader

- force_minrev:
- Enable or disable the microcode minimal revision
- enforcement for the runtime microcode loader.
+ force_minrev[=<bool>]:
+ Enable or disable microcode minimal revision enforcement
+ for the runtime microcode loader according to <bool>. If
+ <bool> is not given, enable the enforcement.

mini2440= [ARM,HW,KNL]
Format:[0..2][b][c][t]
diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
index 303b0d0b4573..af7196d94540 100644
--- a/arch/x86/kernel/cpu/microcode/core.c
+++ b/arch/x86/kernel/cpu/microcode/core.c
@@ -138,6 +138,11 @@ bool __init microcode_loader_disabled(void)
return dis_ucode_ldr;
}

+static inline void advance_option_argument(char **s)
+{
+ strsep(s, "=");
+}
+
static void __init early_parse_cmdline(void)
{
char cmd_buf[64] = {};
@@ -147,15 +152,19 @@ static void __init early_parse_cmdline(void)
while ((s = strsep(&p, ","))) {
if (IS_ENABLED(CONFIG_MICROCODE_DBG)) {
if (str_has_prefix(s, "base_rev=")) {
- /* advance to the option arg */
- strsep(&s, "=");
+ advance_option_argument(&s);
if (kstrtouint(s, 16, &base_rev)) { ; }
continue;
}
}

- if (!strcmp("force_minrev", s))
+ if (!strcmp("force_minrev", s)) {
force_minrev = true;
+ } else if (str_has_prefix(s, "force_minrev=")) {
+ advance_option_argument(&s);
+ if (kstrtobool(s, &force_minrev)) { ; }
+ continue;
+ }

if (!strcmp(s, "dis_ucode_ldr"))
dis_ucode_ldr = true;
--
2.53.0