恶意数据在目标 c 中是否归零?



我想知道这一点,因为如果进程 A 可以 malloc 50 meg 的数据,而这些数据不是零的,并且该内存块原来包括来自进程 B 的物理页面并且仍然包含进程 B 的数据,这是一个潜在的安全漏洞。

malloc'd 数据在目标 c 中是否归零?

大多数是的。有一个零页编写器是内存管理器的一部分,它提供了一个零页的进程。内存管理器将调用memory_object_data_unavailable,告诉内核为该区域提供零填充内存。

如果进程调用free然后再次mallocs,则页面不会重新清零。仅当需要新页面时,才会发生清零。实际上,该页面可能不会在free时返回到系统。由于运行时,该进程保留页面供自己使用。相关,请参阅 malloc 实现是否会将释放的内存返回到系统?

如果在内存不足的情况下将页面返回到系统,则即使进程以前保存了该页面,该页面也将重新归零。内存管理器不考虑页面的最后一个所有者。它只是假设新页面需要为零以避免跨进程的信息泄漏。

注意Microsoft称其为零页编写器。达尔文有相同的成分,但我不记得看到它的名字。另请参阅 Singh 的 Mac OS X Internals: A Systems Approach。它有点过时,但它提供了很多系统信息。第8章,记忆,是感兴趣的一章。

辛格的书还涉及其他细节,比如需要页面但不需要归零的情况。在这种情况下,进程之间存在一些共享数据,并根据写入时复制 (COW) 方案为进程分配了一个新页面。实际上,新页面是从现有数据而不是零填充的。感兴趣的功能是memory_object_data_request

Linux在关于零的文章中对零页有一个有趣的讨论。它对一个表面上看起来很平凡的话题进行了有趣的阅读。

相关内容

  • 没有找到相关文章

最新更新