26. TSX 异步中止(TAA)缓解措施

26.1. 概述

TSX 异步中止(TAA)是一种针对某些英特尔处理器内部缓冲区的侧信道攻击,类似于微架构数据采样(MDS)。在这种情况下,当事务同步扩展(TSX)事务中存在挂起的异步中止条件时,某些加载操作可能会将无效数据推测性地传递给依赖操作。这包括没有故障或辅助条件的加载。此类加载可能会推测性地公开与 MDS 相同的微架构数据结构中的陈旧数据,其公开范围与 MDS 相同,即线程内和跨线程。此问题影响所有当前支持 TSX 的处理器。

26.2. 缓解策略

a) 禁用 TSX - 缓解措施之一是禁用 TSX。在微代码更新后,未来的和当前的处理器将提供一个新的 MSR IA32_TSX_CTRL,可用于禁用 TSX。此外,它还控制 CPUID 中 TSX 特性位(RTM 和 HLE)的枚举。

b) 清除 CPU 缓冲区 - 类似于 MDS,清除 CPU 缓冲区可以缓解此漏洞。有关此方法的更多详细信息,请参见 Documentation/admin-guide/hw-vuln/mds.rst

26.3. 内核内部缓解模式

关闭

缓解已禁用。要么 CPU 不受影响,要么在内核命令行中提供了 tsx_async_abort=off。

tsx 已禁用

缓解已启用。在支持 TSX 控制的处理器上,TSX 特性在启动时默认被禁用。

verw

缓解已启用。CPU 受到影响,且 CPUID 中通告了 MD_CLEAR。

需要微代码

缓解已启用。CPU 受到影响,且 CPUID 中未通告 MD_CLEAR。这主要用于虚拟化场景,其中宿主机拥有更新的微代码,但虚拟机管理程序未在 CPUID 中公开 MD_CLEAR。这是一种尽力而为的方法,不提供保证。

如果 CPU 受到影响且未提供 “tsx_async_abort” 内核命令行参数,则内核会根据 RTM 和 MD_CLEAR CPUID 位的状态选择适当的缓解措施。

下表显示了 tsx=on|off|auto 命令行选项对 MSR_IA32_ARCH_CAPABILITIES 位各种组合下的 TAA 缓解状态、VERW 行为和 TSX 特性的影响。

  1. “tsx=off”

MSR_IA32_ARCH_CAPABILITIES 位

命令行 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

硬件默认值

需要微代码更新

需要微代码更新

0

1

1

Disabled(禁用)

TSX 已禁用

TSX 已禁用

1

X

1

Disabled(禁用)

X

无需操作

无需操作

  1. “tsx=on”

MSR_IA32_ARCH_CAPABILITIES 位

命令行 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

硬件默认值

需要微代码更新

需要微代码更新

0

1

1

已启用

与 MDS 相同

1

X

1

已启用

X

无需操作

无需操作

  1. “tsx=auto”

MSR_IA32_ARCH_CAPABILITIES 位

命令行 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

硬件默认值

需要微代码更新

需要微代码更新

0

1

1

Disabled(禁用)

TSX 已禁用

TSX 已禁用

1

X

1

已启用

X

无需操作

无需操作

在表中,TSX_CTRL_MSR 是 MSR_IA32_ARCH_CAPABILITIES 中的一个新位,用于指示是否支持 MSR_IA32_TSX_CTRL。

IA32_TSX_CTRL MSR 中有两个控制位

位 0:置位时它会禁用受限事务内存(RTM)

TSX 的子特性(将强制所有事务在 XBEGIN 指令上中止)。

位 1:置位时它会禁用 RTM 和 HLE 特性的枚举

(即会使 CPUID(EAX=7).EBX{bit4} 和 CPUID(EAX=7).EBX{bit11} 读取为 0)。