当brk减少然后又增加时,Linux内核是否清除了内存?

时间:2009-08-25 10:04:00

标签: memory-management linux-kernel system-calls brk

我只是想知道用户程序通过brk系统调用释放的内存会发生什么,然后再次返回。内核是否清除它或者内容是否未定义?

我相信内核在通过brk重新分配时会清除页面,但是如果返回该页面,则将其全部归零,然后再次请求返回,我就无法解决问题。我正在通过lxr.linux.no来查找。我还会看一下this帖子中建议的那本书。

感谢您的回复。

2 个答案:

答案 0 :(得分:3)

您获得了新的归零页面:http://lxr.linux.no/#linux+v2.6.30.5/mm/memory.c#L2580

必须清除新页面的内容。它可能包含敏感信息,考虑安全性。

答案 1 :(得分:1)

IIRC明确要求。因此,当一个页面被驱逐时,内核会将其单独留下,但是当它被分配给新的用户/用户(其中​​一个重新增长的brk会计算)时它将被清除。有各种各样的黑客可以将新的匿名页面映射到“零页面”,然后在写入时将其交换为真正清除的页面。

如果您担心信息泄漏,不应该将未分配的页面推送到交换,尽管各种冷启动攻击可能会对它们起作用。

有关详细信息,请参阅最近的LWN文章:http://lwn.net/Articles/340370/