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

时间:2017-07-04 22:38:29

标签: ios objective-c macos security malloc

我对此感到疑惑,因为如果进程A可以将50兆的数据分离出来并且那块内存结果包含来自的物理页面,那么这是一个潜在的安全漏洞流程B仍然包含流程B的数据。

1 个答案:

答案 0 :(得分:3)

  

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

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

如果进程再次调用free然后调用mallocs,则页面重新归零。只有在需要新页面时才会进行归零。实际上,页面可能不会在free后返回到系统。由于运行时,该进程将页面保留为自己使用。相关,请参阅Will malloc implementations return free-ed memory back to the system?

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

注意Microsoft将其称为零页面编写器。达尔文有相同的组成部分,但我不记得看到它命名。另见Singh的Mac OS X Internals: A Systems Approach。它有点陈旧,但它提供了很多系统信息。第8章,记忆,是感兴趣的章节。

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

Linux对Some ado about zero的零页面进行了有趣的讨论。关于一个看似平凡的话题的有趣读物。