регионы mmap, выделяемые из зарезервированного стекового пространства? - PullRequest
1 голос
/ 28 июля 2010

В нашем продукте мы используем реализацию malloc, которая использует исключительно mmap для распределения памяти.Мы также добросовестно используем alloca ing.Мы только что столкнулись с проблемой, когда mmap будет выделять области, которые должны быть зарезервированы для стекового пространства (таким образом, очень плохие вещи случаются, когда один из наших больших alloca разливается в область malloc'd).

Ограничением выделения нашего процесса является адресное пространство виртуальной машины, а не физическая память.Мы наблюдали за файлом / proc / * / maps, пока процесс выполнялся, и наблюдали за тем, как malloc поглощает любое доступное адресное пространство.В конечном итоге он прибегает к выделению адресов в пределах диапазона стеков, и в конечном итоге в него входит большой alloca.

Мы попытались обойти это, alloca ограничив весь наш стек при запуске, но это не оказалось стабильным на разных платформах (это приводит к ошибкам при попытке получить доступ к памяти alloca d на моем устройстве 2.4 dev, в то время как оно работает на рабочей машине 2.6).

Есть ли способ на самом делезарезервировать адресное пространство?Что еще можно сделать?

Ответы [ 2 ]

0 голосов
/ 08 сентября 2010

Это, очевидно, недавно задокументированная уязвимость безопасности, используемая в эксплойте повышения привилегий. Предположительно новые версии ядра будут исправлены.

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

0 голосов
/ 28 июля 2010

Старые версии heartbeat гарантировали, что пространство стека было зафиксировано путем вызова рекурсивной функции, которая memset () редактировала 1Kb за раз до 0xff. Heartbeat сделал это, чтобы иметь возможность mlock () всей памяти, которая ему потенциально может понадобиться.

...