]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
x86/bugs: Add a separate config for SSB
authorBreno Leitao <leitao@debian.org>
Mon, 29 Jul 2024 16:40:57 +0000 (09:40 -0700)
committerBorislav Petkov (AMD) <bp@alien8.de>
Tue, 30 Jul 2024 12:51:45 +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 SSB 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-10-leitao@debian.org
arch/x86/Kconfig
arch/x86/kernel/cpu/bugs.c

index 33e125a28f793ca84f4347445d8257af77496d53..2e72a07981b2509f471779c2d1103cdbe34444a9 100644 (file)
@@ -2741,6 +2741,16 @@ config MITIGATION_SRBDS
          using MDS techniques.
          See also
          <file:Documentation/admin-guide/hw-vuln/special-register-buffer-data-sampling.rst>
+
+config MITIGATION_SSB
+       bool "Mitigate Speculative Store Bypass (SSB) hardware bug"
+       default y
+       help
+         Enable mitigation for Speculative Store Bypass (SSB). SSB is a
+         hardware security vulnerability and its exploitation takes advantage
+         of speculative execution in a similar way to the Meltdown and Spectre
+         security vulnerabilities.
+
 endif
 
 config ARCH_HAS_ADD_PAGES
index 45cbc6f994cad67b533e36c0aa8aee4980a1d0c7..a7f20ae2fcf4f47801b2c73c1dbc4b6d8c00fdbe 100644 (file)
@@ -2027,10 +2027,12 @@ static const struct {
 
 static enum ssb_mitigation_cmd __init ssb_parse_cmdline(void)
 {
-       enum ssb_mitigation_cmd cmd = SPEC_STORE_BYPASS_CMD_AUTO;
+       enum ssb_mitigation_cmd cmd;
        char arg[20];
        int ret, i;
 
+       cmd = IS_ENABLED(CONFIG_MITIGATION_SSB) ?
+               SPEC_STORE_BYPASS_CMD_AUTO : SPEC_STORE_BYPASS_CMD_NONE;
        if (cmdline_find_option_bool(boot_command_line, "nospec_store_bypass_disable") ||
            cpu_mitigations_off()) {
                return SPEC_STORE_BYPASS_CMD_NONE;
@@ -2038,7 +2040,7 @@ static enum ssb_mitigation_cmd __init ssb_parse_cmdline(void)
                ret = cmdline_find_option(boot_command_line, "spec_store_bypass_disable",
                                          arg, sizeof(arg));
                if (ret < 0)
-                       return SPEC_STORE_BYPASS_CMD_AUTO;
+                       return cmd;
 
                for (i = 0; i < ARRAY_SIZE(ssb_mitigation_options); i++) {
                        if (!match_option(arg, ret, ssb_mitigation_options[i].option))
@@ -2049,8 +2051,8 @@ static enum ssb_mitigation_cmd __init ssb_parse_cmdline(void)
                }
 
                if (i >= ARRAY_SIZE(ssb_mitigation_options)) {
-                       pr_err("unknown option (%s). Switching to AUTO select\n", arg);
-                       return SPEC_STORE_BYPASS_CMD_AUTO;
+                       pr_err("unknown option (%s). Switching to default mode\n", arg);
+                       return cmd;
                }
        }