2009-08-25 5 views
1

Мне просто интересно, что происходит с памятью, которую пользовательская программа выпускает через системный вызов brk, а затем возвращается обратно. Является ли ядро ​​очищено или содержимое осталось неопределенным?Является ли память очищена ядром Linux, когда brk уменьшается, а затем снова увеличивается?

Я считаю, что ядро ​​очищает страницы, когда они были недавно выделены с помощью brk, но я не могу сработать, если он нулирует их все, если эта страница будет возвращена, а затем запрошена обратно. Я просматриваю lxr.linux.no, чтобы попытаться это выяснить. Я также рассмотрю книгу, предложенную в сообщении this.

Спасибо за ваши ответы.

Tim

ответ

3

Вы получаете свежую обнуляются страница: http://lxr.linux.no/#linux+v2.6.30.5/mm/memory.c#L2580

Содержания свежей страницы должен быть очищен. Он может содержать конфиденциальную информацию, думать о безопасности.

1

IIRC по запросу. Поэтому, когда выгружается страница, ядро ​​оставляет ее в покое, однако она будет очищена при назначении новому пользователю/использованию (из которого будет рассчитываться повторно растущий brk). Существуют различные хаки для отображения свежих анонимных страниц на «нулевую страницу», а затем поменяйте их на реальную очищенную страницу при записи.

Нераспределенные страницы не должны подвергаться обмену, если вы беспокоитесь об утечке информации, хотя различные атаки с холодным ботинком могут работать против них.

Смотрите недавнюю статью LWN для получения дополнительной информации: http://lwn.net/Articles/340370/