mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
x86/boot: Report details of speculative mitigations
Nothing very interesting at the moment, but the logic will grow as new
mitigations are added.
This is part of XSA-254.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
master commit: 31d6c53adf
master date: 2018-01-16 17:45:50 +0000
This commit is contained in:
1 parent
60c50f2b0b
commit
2eefd926bb
4 files changed
+114
No files matched your search
@@ -56,6 +56,7 @@ obj-y += setup.o
|
||||
obj-y += shutdown.o
|
||||
obj-y += smp.o
|
||||
obj-y += smpboot.o
|
||||
obj-y += spec_ctrl.o
|
||||
obj-y += srat.o
|
||||
obj-y += string.o
|
||||
obj-y += sysctl.o
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
#include <asm/alternative.h>
|
||||
#include <asm/mc146818rtc.h>
|
||||
#include <asm/cpuid.h>
|
||||
#include <asm/spec_ctrl.h>
|
||||
|
||||
/* opt_nosmp: If true, secondary processors are ignored. */
|
||||
static bool_t __initdata opt_nosmp;
|
||||
@@ -1479,6 +1480,8 @@ void __init noreturn __start_xen(unsigned long mbi_p)
|
||||
if ( cpu_has_fsgsbase )
|
||||
set_in_cr4(X86_CR4_FSGSBASE);
|
||||
|
||||
init_speculation_mitigations();
|
||||
|
||||
init_idle_domain();
|
||||
|
||||
this_cpu(stubs.addr) = alloc_stub_page(smp_processor_id(),
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
/******************************************************************************
|
||||
* arch/x86/spec_ctrl.c
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Copyright (c) 2017-2018 Citrix Systems Ltd.
|
||||
*/
|
||||
#include <xen/init.h>
|
||||
#include <xen/lib.h>
|
||||
|
||||
#include <asm/processor.h>
|
||||
#include <asm/spec_ctrl.h>
|
||||
|
||||
enum ind_thunk {
|
||||
THUNK_DEFAULT, /* Decide which thunk to use at boot time. */
|
||||
THUNK_NONE, /* Missing compiler support for thunks. */
|
||||
|
||||
THUNK_RETPOLINE,
|
||||
};
|
||||
|
||||
static void __init print_details(enum ind_thunk thunk)
|
||||
{
|
||||
printk(XENLOG_DEBUG "Speculative mitigation facilities:\n");
|
||||
|
||||
/* Compiled-in support which pertains to BTI mitigations. */
|
||||
if ( IS_ENABLED(CONFIG_INDIRECT_THUNK) )
|
||||
printk(XENLOG_DEBUG " Compiled-in support: INDIRECT_THUNK\n");
|
||||
|
||||
printk(XENLOG_INFO
|
||||
"BTI mitigations: Thunk %s\n",
|
||||
thunk == THUNK_NONE ? "N/A" :
|
||||
thunk == THUNK_RETPOLINE ? "RETPOLINE" : "?");
|
||||
}
|
||||
|
||||
void __init init_speculation_mitigations(void)
|
||||
{
|
||||
enum ind_thunk thunk = THUNK_DEFAULT;
|
||||
|
||||
/*
|
||||
* Supplimentary minor adjustments. Without compiler support, there are
|
||||
* no thunks.
|
||||
*/
|
||||
if ( !IS_ENABLED(CONFIG_INDIRECT_THUNK) )
|
||||
thunk = THUNK_NONE;
|
||||
|
||||
/*
|
||||
* If there are still no thunk preferences, the compiled default is
|
||||
* actually retpoline, and it is better than nothing.
|
||||
*/
|
||||
if ( thunk == THUNK_DEFAULT )
|
||||
thunk = THUNK_RETPOLINE;
|
||||
|
||||
print_details(thunk);
|
||||
}
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* mode: C
|
||||
* c-file-style: "BSD"
|
||||
* c-basic-offset: 4
|
||||
* tab-width: 4
|
||||
* indent-tabs-mode: nil
|
||||
* End:
|
||||
*/
|
||||
@@ -0,0 +1,35 @@
|
||||
/******************************************************************************
|
||||
* include/asm-x86/spec_ctrl.h
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Copyright (c) 2017-2018 Citrix Systems Ltd.
|
||||
*/
|
||||
|
||||
#ifndef __X86_SPEC_CTRL_H__
|
||||
#define __X86_SPEC_CTRL_H__
|
||||
|
||||
void init_speculation_mitigations(void);
|
||||
|
||||
#endif /* !__X86_SPEC_CTRL_H__ */
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* mode: C
|
||||
* c-file-style: "BSD"
|
||||
* c-basic-offset: 4
|
||||
* tab-width: 4
|
||||
* indent-tabs-mode: nil
|
||||
* End:
|
||||
*/
|
||||