linux - 非特权进程可以恶意使用 mlock() 来锁定系统吗?

标签 linux ubuntu memory-management

我刚刚了解到 mlock() 功能。我知道它允许您将程序内存锁定到 RAM 中(允许物理地址更改但不允许内存被驱逐)。我读过较新的 Linux 内核版本有一个 mlock 限制( ulimit -l ),但这仅适用于非特权进程。如果这是每个进程的限制,那么 fork() 非特权进程是否会产生大量进程? -ing 并调用每个电话 mlock() , 直到所有内存都被锁定并且操作系统由于大量交换或 OOM killer 而变慢电话?

最佳答案

攻击者可能会因此而导致问题,但不会比他们可能导致的问题更多。
我的系统上的默认限制约为 2 MB。这意味着一个典型的进程将无法将超过 2 MB 的数据锁定到内存中。请注意,这只是不会被换出的普通内存;它不是一个独立的、特殊的资源。
恶意进程可能会产生许多其他进程来使用更多锁定的内存,但是因为一个进程通常需要超过 2 MB 的内存才能运行,因此通过锁定它并没有真正更有效地耗尽内存;事实上,启动一个新进程本身在使用内存方面实际上比锁定它更有效。确实,一个进程可以简单地 fork 、锁定内存和休眠,在这种情况下,它的其他页面可能会因为写时复制而被共享,但它也可能只是分配相当大的内存块并导致更多问题,实际上它通常会被允许这样做,因为许多进程需要大量的内存。
所以,是的,攻击者可能会使用这种技术来引发问题,但是因为有许多更简单、更有效的方法可以耗尽内存或导致其他问题,所以这似乎是一种愚蠢的做法。一方面,我并不担心这是一个实际的安全问题。

关于linux - 非特权进程可以恶意使用 mlock() 来锁定系统吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67199043/

相关文章:

memory-management - GPU 访问系统 RAM

c - 内存分配器 - 遍历内存时出现问题

c - 在 GLib 中搜索 g_slist_find_custom() 函数

c++ - 有没有办法在 C++ 中检测或更改 EOL 格式从 Windows 到 Linux?

django - 试图将 django 安装到我的虚拟环境中

c++ - 如何使用D-Bus获取设备名称?

ruby-on-rails - 在 ubuntu 上安装 Ruby on Rails 失败。我能有帮助吗?

linux - XEN 在哪里存储启动日志(Ubuntu)?

linux - Composer在您的平台中检测到问题: Your Composer dependencies require a PHP version ">= 7.3.0"

c - 为什么 malloc 不是 "using up"我电脑上的内存?