]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
x86/bugs: Add a separate config for Spectre V2
authorBreno Leitao <leitao@debian.org>
Mon, 29 Jul 2024 16:40:56 +0000 (09:40 -0700)
committerBorislav Petkov (AMD) <bp@alien8.de>
Tue, 30 Jul 2024 12:51:11 +0000 (14:51 +0200)
Currently, the CONFIG_SPECULATION_MITIGATIONS is halfway populated,
where some mitigations have entries in Kconfig, and they could be
modified, while others mitigations do not have Kconfig entries, and
could not be controlled at build time.

Create an entry for the Spectre V2 CPU mitigation under
CONFIG_SPECULATION_MITIGATIONS. This allow users to enable or disable
it at compilation time.

Signed-off-by: Breno Leitao <leitao@debian.org>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>
Link: https://lore.kernel.org/r/20240729164105.554296-9-leitao@debian.org
arch/x86/Kconfig
arch/x86/kernel/cpu/bugs.c

index 22d324581a601ab4340c74b8db17d2c5c4c02bdb..33e125a28f793ca84f4347445d8257af77496d53 100644 (file)
@@ -2716,6 +2716,18 @@ config MITIGATION_SPECTRE_V1
          memory access bounds check.
          See also <file:Documentation/admin-guide/hw-vuln/spectre.rst>
 
+config MITIGATION_SPECTRE_V2
+       bool "Mitigate SPECTRE V2 hardware bug"
+       default y
+       help
+         Enable mitigation for Spectre V2 (Branch Target Injection). Spectre
+         V2 is a class of side channel attacks that takes advantage of
+         indirect branch predictors inside the processor. In Spectre variant 2
+         attacks, the attacker can steer speculative indirect branches in the
+         victim to gadget code by poisoning the branch target buffer of a CPU
+         used for predicting indirect branch addresses.
+         See also <file:Documentation/admin-guide/hw-vuln/spectre.rst>
+
 config MITIGATION_SRBDS
        bool "Mitigate Special Register Buffer Data Sampling (SRBDS) hardware bug"
        depends on CPU_SUP_INTEL
index 8292a96d376cfe0684842d50f4eabcd7b3fca478..45cbc6f994cad67b533e36c0aa8aee4980a1d0c7 100644 (file)
@@ -1452,17 +1452,18 @@ static void __init spec_v2_print_cond(const char *reason, bool secure)
 
 static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void)
 {
-       enum spectre_v2_mitigation_cmd cmd = SPECTRE_V2_CMD_AUTO;
+       enum spectre_v2_mitigation_cmd cmd;
        char arg[20];
        int ret, i;
 
+       cmd = IS_ENABLED(CONFIG_MITIGATION_SPECTRE_V2) ?  SPECTRE_V2_CMD_AUTO : SPECTRE_V2_CMD_NONE;
        if (cmdline_find_option_bool(boot_command_line, "nospectre_v2") ||
            cpu_mitigations_off())
                return SPECTRE_V2_CMD_NONE;
 
        ret = cmdline_find_option(boot_command_line, "spectre_v2", arg, sizeof(arg));
        if (ret < 0)
-               return SPECTRE_V2_CMD_AUTO;
+               return cmd;
 
        for (i = 0; i < ARRAY_SIZE(mitigation_options); i++) {
                if (!match_option(arg, ret, mitigation_options[i].option))
@@ -1472,8 +1473,8 @@ static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void)
        }
 
        if (i >= ARRAY_SIZE(mitigation_options)) {
-               pr_err("unknown option (%s). Switching to AUTO select\n", arg);
-               return SPECTRE_V2_CMD_AUTO;
+               pr_err("unknown option (%s). Switching to default mode\n", arg);
+               return cmd;
        }
 
        if ((cmd == SPECTRE_V2_CMD_RETPOLINE ||