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

时间:2010-07-28 09:07:34

标签: linux malloc heap stack-overflow mmap

在我们的产品中,我们使用malloc实现,该实现完全依赖于mmap进行内存分配。我们也合理使用alloca ing。我们刚刚遇到一个问题,mmap将为堆栈空间分配应该保留的区域(因此当我们的一个较大的alloca溢出到malloc'd区域时会导致非常糟糕的事情发生)。 / p>

我们的进程分配的限制是我们的VM地址空间,而不是物理内存。当进程运行时,我们已经看过/ proc / * / maps文件,看着malloc占用了任何可用的地址空间。它最终会在堆栈rlimit-set范围内分配地址,并最终将一个大的alloca延伸到其中。

我们试图在启动时通过alloca我们的整个堆栈限制解决它,但是在各个平台上都没有证明是稳定的(它试图访问我的alloca内存段错误2.4开发盒,虽然它适用于2.6生产机器。)

有没有办法真正保留地址空间?还有什么可以做的?

2 个答案:

答案 0 :(得分:0)

旧版本的心跳确保通过调用memset()ed 1Kb一次到0xff的递归函数来提交堆栈空间。 Heartbeat这样做可以mlock()它可能需要的所有内存。

答案 1 :(得分:0)

这显然是最近记录的特权升级漏洞中使用的安全漏洞。据称,更新的内核版本将被修补。

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