代码之家  ›  专栏  ›  技术社区  ›  jdizzle

从保留的堆栈空间分配mmap区域?

  •  1
  • jdizzle  · 技术社区  · 14 年前

    在我们的产品中,我们使用 malloc 只依赖mmap进行内存分配的实现。我们也合理利用 alloca 惯性导航与制导。我们刚刚遇到一个问题,MMAP将分配 应该 保留堆叠空间(因此当我们的一个较大的alloca溢出到malloc'd区域时会导致非常糟糕的事情发生)。

    进程分配的限制是我们的虚拟机地址空间,而不是物理内存。我们已经观察了进程运行时的/proc/*/maps文件,并观察malloc占用了所有可用的地址空间。它最终倾向于在栈的限制设置范围内分配地址,最终 分配器 延伸到里面。

    我们一直在努力解决这个问题 分配器 在启动时限制我们的整个堆栈,但这并没有证明跨平台是稳定的(它在尝试访问 分配器 d内存在我的2.4 dev box上,而它在2.6生产机器上工作)。

    有没有办法实际保留地址空间?还能做什么?

    2 回复  |  直到 14 年前
        1
  •  0
  •   ninjalj    14 年前

    heartbeat的旧版本通过调用一个递归函数(memset()一次将1kb设置为0xff)来确保堆栈空间。heartbeat这样做是为了能够mlock()它可能需要的所有内存。

        2
  •  0
  •   jdizzle    14 年前

    这显然是最近记录的一个安全漏洞,用于权限提升攻击。据说新的内核版本将被修补。

    http://www.exploit-db.com/download_pdf/14696/