用标记数据填充 x86_64 指针的前 16 位?
Filling x86_64 Pointers Top Sixteen Bits With Tag Data?
由于当前的 x86_64 实现只能使用四十八位 "virtual" 地址 space 来降低 MMU 的复杂性,前 16 位是否可以用于实现安全标签数据。当前的实现是否限制了这一点(甚至知道 IP 和其他段寄存器是完整的六十四位)的使用并将指针的前十六位限制为仅包含虚拟地址而不包含其他数据?
不,你不能。当前要求前 16 位全部相同(例如 0x0000…
或 0xffff…
)——不符合此模式的地址总是会导致错误。未来的修订版可能 "real" 地址 space 在此范围内,因此将这些位用于标记是不安全的。
由于当前的 x86_64 实现只能使用四十八位 "virtual" 地址 space 来降低 MMU 的复杂性,前 16 位是否可以用于实现安全标签数据。当前的实现是否限制了这一点(甚至知道 IP 和其他段寄存器是完整的六十四位)的使用并将指针的前十六位限制为仅包含虚拟地址而不包含其他数据?
不,你不能。当前要求前 16 位全部相同(例如 0x0000…
或 0xffff…
)——不符合此模式的地址总是会导致错误。未来的修订版可能 "real" 地址 space 在此范围内,因此将这些位用于标记是不安全的。