x86/spec-ctrl: Use a taint for CET without MSR_SPEC_CTRL

Reword the comment for 'S' to include an incompatible set of features on the
same core.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
(cherry picked from commit 3f63f45104)

Also minimal fragments from:

  c/s 0bf9efb9ee ("xen/arm: Sanitize cpuinfo ID registers fields")

to introduce TAINT_CPU_OUT_OF_SPEC.
This commit is contained in:
Andrew Cooper committed 2023-08-03 19:14:19 +01:00
1 parent 18e759cb87
commit efc4bdd2c9
3 files changed
+8 -2

No files matched your search

+3
View File
@@ -1112,7 +1112,10 @@ void __init init_speculation_mitigations(void)
if ( read_cr4() & X86_CR4_CET )
{
if ( !has_spec_ctrl )
{
printk(XENLOG_WARNING "?!? CET active, but no MSR_SPEC_CTRL?\n");
add_taint(TAINT_CPU_OUT_OF_SPEC);
}
else if ( opt_ibrs == -1 )
opt_ibrs = ibrs = true;
+4 -2
View File
@@ -338,6 +338,7 @@ unsigned int tainted;
* 'E' - An error (e.g. a machine check exceptions) has been injected.
* 'H' - HVM forced emulation prefix is permitted.
* 'M' - Machine had a machine check experience.
* 'S' - Out of spec CPU (Incompatible features on one or more cores).
*
* The string is overwritten by the next call to print_taint().
*/
@@ -345,11 +346,12 @@ char *print_tainted(char *str)
{
if ( tainted )
{
snprintf(str, TAINT_STRING_MAX_LEN, "Tainted: %c%c%c%c",
snprintf(str, TAINT_STRING_MAX_LEN, "Tainted: %c%c%c%c%c",
tainted & TAINT_MACHINE_CHECK ? 'M' : ' ',
tainted & TAINT_SYNC_CONSOLE ? 'C' : ' ',
tainted & TAINT_ERROR_INJECT ? 'E' : ' ',
tainted & TAINT_HVM_FEP ? 'H' : ' ');
tainted & TAINT_HVM_FEP ? 'H' : ' ',
tainted & TAINT_CPU_OUT_OF_SPEC ? 'S' : ' ');
}
else
{
+1
View File
@@ -183,6 +183,7 @@ uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c);
#define TAINT_MACHINE_CHECK (1u << 1)
#define TAINT_ERROR_INJECT (1u << 2)
#define TAINT_HVM_FEP (1u << 3)
#define TAINT_CPU_OUT_OF_SPEC (1u << 5)
extern unsigned int tainted;
#define TAINT_STRING_MAX_LEN 20
extern char *print_tainted(char *str);
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.