4d6e2c0
From 60e00f77a5cc671d30c5ef3318f5b8e9b74e4aa3 Mon Sep 17 00:00:00 2001
4d6e2c0
From: =?utf8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>
4d6e2c0
Date: Mon, 26 Feb 2024 16:06:42 +0100
4d6e2c0
Subject: [PATCH] x86/spec: fix BRANCH_HARDEN option to only be set when
4d6e2c0
 build-enabled
4d6e2c0
MIME-Version: 1.0
4d6e2c0
Content-Type: text/plain; charset=utf8
4d6e2c0
Content-Transfer-Encoding: 8bit
4d6e2c0
4d6e2c0
The current logic to handle the BRANCH_HARDEN option will report it as enabled
4d6e2c0
even when build-time disabled. Fix this by only allowing the option to be set
4d6e2c0
when support for it is built into Xen.
4d6e2c0
4d6e2c0
Fixes: 2d6f36daa086 ('x86/nospec: Introduce CONFIG_SPECULATIVE_HARDEN_BRANCH')
4d6e2c0
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
4d6e2c0
Reviewed-by: Jan Beulich <jbeulich@suse.com>
4d6e2c0
---
4d6e2c0
 xen/arch/x86/spec_ctrl.c | 14 ++++++++++++--
4d6e2c0
 1 file changed, 12 insertions(+), 2 deletions(-)
4d6e2c0
4d6e2c0
diff --git a/xen/arch/x86/spec_ctrl.c b/xen/arch/x86/spec_ctrl.c
4d6e2c0
index 421fe3f640..503f1c7a37 100644
4d6e2c0
--- a/xen/arch/x86/spec_ctrl.c
4d6e2c0
+++ b/xen/arch/x86/spec_ctrl.c
4d6e2c0
@@ -50,7 +50,8 @@ static int8_t __initdata opt_psfd = -1;
4d6e2c0
 int8_t __ro_after_init opt_ibpb_ctxt_switch = -1;
4d6e2c0
 int8_t __read_mostly opt_eager_fpu = -1;
4d6e2c0
 int8_t __read_mostly opt_l1d_flush = -1;
4d6e2c0
-static bool __initdata opt_branch_harden = true;
4d6e2c0
+static bool __initdata opt_branch_harden =
4d6e2c0
+    IS_ENABLED(CONFIG_SPECULATIVE_HARDEN_BRANCH);
4d6e2c0
 
4d6e2c0
 bool __initdata bsp_delay_spec_ctrl;
4d6e2c0
 uint8_t __read_mostly default_xen_spec_ctrl;
4d6e2c0
@@ -268,7 +269,16 @@ static int __init cf_check parse_spec_ctrl(const char *s)
4d6e2c0
         else if ( (val = parse_boolean("l1d-flush", s, ss)) >= 0 )
4d6e2c0
             opt_l1d_flush = val;
4d6e2c0
         else if ( (val = parse_boolean("branch-harden", s, ss)) >= 0 )
4d6e2c0
-            opt_branch_harden = val;
4d6e2c0
+        {
4d6e2c0
+            if ( IS_ENABLED(CONFIG_SPECULATIVE_HARDEN_BRANCH) )
4d6e2c0
+                opt_branch_harden = val;
4d6e2c0
+            else
4d6e2c0
+            {
4d6e2c0
+                no_config_param("SPECULATIVE_HARDEN_BRANCH", "spec-ctrl", s,
4d6e2c0
+                                ss);
4d6e2c0
+                rc = -EINVAL;
4d6e2c0
+            }
4d6e2c0
+        }
4d6e2c0
         else if ( (val = parse_boolean("srb-lock", s, ss)) >= 0 )
4d6e2c0
             opt_srb_lock = val;
4d6e2c0
         else if ( (val = parse_boolean("unpriv-mmio", s, ss)) >= 0 )
4d6e2c0
-- 
4d6e2c0
2.30.2
4d6e2c0