【发布时间】:2019-04-23 12:14:11
【问题描述】:
为什么虚拟地址 (VA) 分离不足以缓解各种幽灵和崩溃缺陷?我的意思是通用的,不包括攻击intel p-cache == v-cache hack的那个;这显然是个坏主意,我找不到任何同情。
作为基线:
我的内核地址空间 (AS) 只与用户 AS 共享一个文本和数据页。这些页面包含足够的代码和数据来保存和存储寄存器;加载一个新的内存上下文,然后跳转到合适的地方。因此,这里没有有趣的地址可供发现。
来自 exec 的进程 AS 没有任何共同的 VA。也就是说,每个 VA 分配都是从一个公共池中获取的,因此即使是像 libc 这样的共享对象在每个进程中都位于不同的地址。大多数 unix 派生的人会觉得这很奇怪,但这当然是可行的;我错误地做了一次^H*10/为了测试。
如果 Fork() 处理的图像位于不同的访问控制域中,则它们将被沙箱化,以防止交叉泄漏。沙盒可能涉及上下文切换缓存驱逐、排除超线程的 cpuset,一直到无干扰内核。
我了解 [1] 是解决崩溃相关问题的基本缓解措施; [2] 是 [1] 的扩展,因此适用于幽灵。 [3] 会导致性能问题,但同样仅限于这些情况。
【问题讨论】:
-
你在说什么攻击intel p-cache == v-cache hack?我完全理解 Spectre 和 Meltdown 是什么以及它们是如何工作的,但这听起来不像它们中的任何一个。听起来您在谈论 VIPT L1d 缓存,它通过具有足够的关联性使索引位全部来自页面内的偏移量来避免混叠问题(因此可以免费转换,因此缓存的行为类似于 PIPT 但仍然可以做TLB 翻译与从索引集中获取数据+标签并行)。这不是崩溃的原因。
标签: x86 arm x86-64 cpu-architecture branch-prediction