25. TSX 非同步中止 (TAA) 緩解¶
25.1. 概述¶
TSX 非同步中止 (TAA) 是一種針對某些 Intel 處理器內部緩衝區的側通道攻擊,類似於微架構資料取樣 (MDS)。在這種情況下,當事務同步擴充套件 (TSX) 事務中存在非同步中止條件時,某些載入可能會將無效資料推測性地傳遞給依賴操作。這包括沒有故障或輔助條件的載入。此類載入可能會推測性地公開來自與 MDS 相同的 uarch 資料結構的陳舊資料,具有相同的公開範圍,即同線程和跨執行緒。此問題影響所有當前支援 TSX 的處理器。
25.2. 緩解策略¶
a) 停用 TSX - 緩解措施之一是停用 TSX。新的 MSR IA32_TSX_CTRL 將在未來的和當前的處理器中透過微碼更新後可用,可用於停用 TSX。此外,它還控制 CPUID 中 TSX 特性位(RTM 和 HLE)的列舉。
b) 清除 CPU 緩衝區 - 類似於 MDS,清除 CPU 緩衝區可以緩解此漏洞。有關此方法的更多詳細資訊,請參見 Documentation/admin-guide/hw-vuln/mds.rst。
25.3. 核心內部緩解模式¶
off
停用緩解。要麼 CPU 不受影響,要麼在核心命令列上提供 tsx_async_abort=off。
tsx disabled
啟用緩解。在支援 TSX 控制的處理器上,預設情況下在啟動時停用 TSX 功能。
verw
啟用緩解。CPU 受到影響,並且在 CPUID 中公佈了 MD_CLEAR。
ucode needed
啟用緩解。CPU 受到影響,並且在 CPUID 中未公佈 MD_CLEAR。這主要用於虛擬化場景,其中主機具有更新的微碼,但虛擬機器管理程式未在 CPUID 中公開 MD_CLEAR。這是一種盡力而為的方法,不保證有效。
如果 CPU 受到影響,並且未提供“tsx_async_abort”核心命令列引數,則核心會根據 RTM 和 MD_CLEAR CPUID 位的狀態選擇適當的緩解措施。
下表指示 tsx=on|off|auto cmdline 選項對各種 MSR_IA32_ARCH_CAPABILITIES 位組合的 TAA 緩解、VERW 行為和 TSX 功能狀態的影響。
“tsx=off”
MSR_IA32_ARCH_CAPABILITIES 位 |
使用 cmdline tsx=off 的結果 |
|||||
|---|---|---|---|---|---|---|
TAA_NO |
MDS_NO |
TSX_CTRL_MSR |
啟動後的 TSX 狀態 |
VERW 可以清除 CPU 緩衝區 |
TAA 緩解 tsx_async_abort=off |
TAA 緩解 tsx_async_abort=full |
0 |
0 |
0 |
硬體預設 |
是 |
與 MDS 相同 |
與 MDS 相同 |
0 |
0 |
1 |
無效情況 |
無效情況 |
無效情況 |
無效情況 |
0 |
1 |
0 |
硬體預設 |
否 |
需要 ucode 更新 |
需要 ucode 更新 |
0 |
1 |
1 |
已停用 |
是 |
TSX 已停用 |
TSX 已停用 |
1 |
X |
1 |
已停用 |
X |
無需 |
無需 |
“tsx=on”
MSR_IA32_ARCH_CAPABILITIES 位 |
使用 cmdline tsx=on 的結果 |
|||||
|---|---|---|---|---|---|---|
TAA_NO |
MDS_NO |
TSX_CTRL_MSR |
啟動後的 TSX 狀態 |
VERW 可以清除 CPU 緩衝區 |
TAA 緩解 tsx_async_abort=off |
TAA 緩解 tsx_async_abort=full |
0 |
0 |
0 |
硬體預設 |
是 |
與 MDS 相同 |
與 MDS 相同 |
0 |
0 |
1 |
無效情況 |
無效情況 |
無效情況 |
無效情況 |
0 |
1 |
0 |
硬體預設 |
否 |
需要 ucode 更新 |
需要 ucode 更新 |
0 |
1 |
1 |
已啟用 |
是 |
無 |
與 MDS 相同 |
1 |
X |
1 |
已啟用 |
X |
無需 |
無需 |
“tsx=auto”
MSR_IA32_ARCH_CAPABILITIES 位 |
使用 cmdline tsx=auto 的結果 |
|||||
|---|---|---|---|---|---|---|
TAA_NO |
MDS_NO |
TSX_CTRL_MSR |
啟動後的 TSX 狀態 |
VERW 可以清除 CPU 緩衝區 |
TAA 緩解 tsx_async_abort=off |
TAA 緩解 tsx_async_abort=full |
0 |
0 |
0 |
硬體預設 |
是 |
與 MDS 相同 |
與 MDS 相同 |
0 |
0 |
1 |
無效情況 |
無效情況 |
無效情況 |
無效情況 |
0 |
1 |
0 |
硬體預設 |
否 |
需要 ucode 更新 |
需要 ucode 更新 |
0 |
1 |
1 |
已停用 |
是 |
TSX 已停用 |
TSX 已停用 |
1 |
X |
1 |
已啟用 |
X |
無需 |
無需 |
在表中,TSX_CTRL_MSR 是 MSR_IA32_ARCH_CAPABILITIES 中的一個新位,指示是否支援 MSR_IA32_TSX_CTRL。
IA32_TSX_CTRL MSR 中有兩個控制位
- 位 0:設定後,它將停用 TSX 的受限事務記憶體 (RTM)
子功能(將強制所有事務在 XBEGIN 指令上中止)。
- 位 1:設定後,它將停用 RTM 和 HLE 功能的列舉
(即,它將使 CPUID(EAX=7).EBX{bit4} 和 CPUID(EAX=7).EBX{bit11} 讀取為 0)。