diff options
author | Pawan Gupta <pawan.kumar.gupta@linux.intel.com> | 2019-10-23 04:45:50 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2019-10-28 03:36:58 -0400 |
commit | c2955f270a84762343000f103e0640d29c7a96f3 (patch) | |
tree | c07481cb694894390440540cabe6effb18aff47a | |
parent | d6d5df1db6e9d7f8f76d2911707f7d5877251b02 (diff) |
x86/msr: Add the IA32_TSX_CTRL MSR
Transactional Synchronization Extensions (TSX) may be used on certain
processors as part of a speculative side channel attack. A microcode
update for existing processors that are vulnerable to this attack will
add a new MSR - IA32_TSX_CTRL to allow the system administrator the
option to disable TSX as one of the possible mitigations.
The CPUs which get this new MSR after a microcode upgrade are the ones
which do not set MSR_IA32_ARCH_CAPABILITIES.MDS_NO (bit 5) because those
CPUs have CPUID.MD_CLEAR, i.e., the VERW implementation which clears all
CPU buffers takes care of the TAA case as well.
[ Note that future processors that are not vulnerable will also
support the IA32_TSX_CTRL MSR. ]
Add defines for the new IA32_TSX_CTRL MSR and its bits.
TSX has two sub-features:
1. Restricted Transactional Memory (RTM) is an explicitly-used feature
where new instructions begin and end TSX transactions.
2. Hardware Lock Elision (HLE) is implicitly used when certain kinds of
"old" style locks are used by software.
Bit 7 of the IA32_ARCH_CAPABILITIES indicates the presence of the
IA32_TSX_CTRL MSR.
There are two control bits in IA32_TSX_CTRL MSR:
Bit 0: When set, it disables the Restricted Transactional Memory (RTM)
sub-feature of TSX (will force all transactions to abort on the
XBEGIN instruction).
Bit 1: When set, it disables the enumeration of the RTM and HLE feature
(i.e. it will make CPUID(EAX=7).EBX{bit4} and
CPUID(EAX=7).EBX{bit11} read as 0).
The other TSX sub-feature, Hardware Lock Elision (HLE), is
unconditionally disabled by the new microcode but still enumerated
as present by CPUID(EAX=7).EBX{bit4}, unless disabled by
IA32_TSX_CTRL_MSR[1] - TSX_CTRL_CPUID_CLEAR.
Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Neelima Krishnan <neelima.krishnan@intel.com>
Reviewed-by: Mark Gross <mgross@linux.intel.com>
Reviewed-by: Tony Luck <tony.luck@intel.com>
Reviewed-by: Josh Poimboeuf <jpoimboe@redhat.com>
-rw-r--r-- | arch/x86/include/asm/msr-index.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h index 20ce682a2540..da4caf6da739 100644 --- a/arch/x86/include/asm/msr-index.h +++ b/arch/x86/include/asm/msr-index.h | |||
@@ -93,6 +93,7 @@ | |||
93 | * Microarchitectural Data | 93 | * Microarchitectural Data |
94 | * Sampling (MDS) vulnerabilities. | 94 | * Sampling (MDS) vulnerabilities. |
95 | */ | 95 | */ |
96 | #define ARCH_CAP_TSX_CTRL_MSR BIT(7) /* MSR for TSX control is available. */ | ||
96 | 97 | ||
97 | #define MSR_IA32_FLUSH_CMD 0x0000010b | 98 | #define MSR_IA32_FLUSH_CMD 0x0000010b |
98 | #define L1D_FLUSH BIT(0) /* | 99 | #define L1D_FLUSH BIT(0) /* |
@@ -103,6 +104,10 @@ | |||
103 | #define MSR_IA32_BBL_CR_CTL 0x00000119 | 104 | #define MSR_IA32_BBL_CR_CTL 0x00000119 |
104 | #define MSR_IA32_BBL_CR_CTL3 0x0000011e | 105 | #define MSR_IA32_BBL_CR_CTL3 0x0000011e |
105 | 106 | ||
107 | #define MSR_IA32_TSX_CTRL 0x00000122 | ||
108 | #define TSX_CTRL_RTM_DISABLE BIT(0) /* Disable RTM feature */ | ||
109 | #define TSX_CTRL_CPUID_CLEAR BIT(1) /* Disable TSX enumeration */ | ||
110 | |||
106 | #define MSR_IA32_SYSENTER_CS 0x00000174 | 111 | #define MSR_IA32_SYSENTER_CS 0x00000174 |
107 | #define MSR_IA32_SYSENTER_ESP 0x00000175 | 112 | #define MSR_IA32_SYSENTER_ESP 0x00000175 |
108 | #define MSR_IA32_SYSENTER_EIP 0x00000176 | 113 | #define MSR_IA32_SYSENTER_EIP 0x00000176 |