Linux 上堆栈可以交换到磁盘吗?可以阻止吗

Linux 上堆栈可以交换到磁盘吗?可以阻止吗

在 Linux 上,包含进程堆栈的内存页是否有可能交换到磁盘?如果是这样,有没有办法在编译时或运行时防止这种情况发生。

我之所以问这个问题是因为 GitHub 上有一个关于可能会从堆栈上的局部变量泄漏秘密

如果这个问题的答案不仅取决于内核,还取决于所使用的用户空间工具链(libc、动态链接器等),那么我的问题尤其是关于 GNU/Linux 和 Android 的。

答案1

在 Linux 上,几乎所有进程的内存都可以被换出,包括其堆和堆栈。

然而,可以将内存页面锁定到物理 RAM 中,以便它们无法被换出。这是使用以下方法完成的mlock系统调用(或mlockall锁定进程的所有内存)。这是一个特权操作,因此该进程需要具有适当的能力CAP_IPC_LOCK(请参阅gnome-keyring-daemon示例:/sbin/getcap /usr/bin/gnome-keyring-daemon)。

相关内容