x86: re-run exception-from-stub recovery selftests with CET-SS enabled

On the BSP, shadow stacks are enabled only relatively late in the
booting process. They in particular aren't active yet when initcalls are
run. Keep the testing there, but invoke that testing a 2nd time when
shadow stacks are active, to make sure we won't regress that case after
addressing XSA-451.

While touching this code, switch the guard from NDEBUG to CONFIG_DEBUG,
such that IS_ENABLED() can validly be used at the new call site.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
Jan Beulich committed 2024-02-27 13:49:52 +01:00
1 parent 91f5f7a915
commit cfe3ad6712
3 files changed
+11 -3

No files matched your search

+5 -3
View File
@@ -144,10 +144,11 @@ search_exception_table(const struct cpu_user_regs *regs, unsigned long *stub_ra)
return 0;
}
#ifndef NDEBUG
#ifdef CONFIG_DEBUG
#include <asm/setup.h>
#include <asm/traps.h>
static int __init cf_check stub_selftest(void)
int __init cf_check stub_selftest(void)
{
static const struct {
uint8_t opc[8];
@@ -171,7 +172,8 @@ static int __init cf_check stub_selftest(void)
unsigned int i;
bool fail = false;
printk("Running stub recovery selftests...\n");
printk("%s stub recovery selftests...\n",
system_state < SYS_STATE_active ? "Running" : "Re-running");
for ( i = 0; i < ARRAY_SIZE(tests); ++i )
{
+2
View File
@@ -38,6 +38,8 @@ void *bootstrap_map(const module_t *mod);
int remove_xen_ranges(struct rangeset *r);
int cf_check stub_selftest(void);
extern uint8_t kbd_shift_flags;
#ifdef NDEBUG
+4
View File
@@ -740,6 +740,10 @@ static void noreturn init_done(void)
system_state = SYS_STATE_active;
/* Re-run stub recovery self-tests with CET-SS active. */
if ( IS_ENABLED(CONFIG_DEBUG) && cpu_has_xen_shstk )
stub_selftest();
domain_unpause_by_systemcontroller(dom0);
/* MUST be done prior to removing .init data. */
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.