Что происходит, когда вы mlock (2) памяти, которая уже поменялась?

258
Awn

Простой вопрос, но я не смог найти ответ.

Если в памяти есть страница, которая уже была выгружена ядром на диск, а затем ее владелец вызывает mlock (2) или VirtualLock на этой странице в памяти, что произойдет?

Он сразу же возвращается к физической памяти? Это стерто с диска? Если кто-то задерживает запись конфиденциальной информации на страницу до тех пор, пока не будет вызван mlock (2), будет ли это гарантировать, что она не будет записана на диск?

В качестве незначительного дополнительного вопроса, что бы вы сделали, чтобы смягчить против такой возможности?

1

1 ответ на вопрос

1
Austin Hemmelgarn

В текущей исходной версии ядра Linux это приведет к сбоям страниц, но, похоже, их копии останутся подкачкой.

Я полагаю, что большинство систем BSD и других систем UNIX ведут себя одинаково, хотя не уверен насчет Windows.

Задержка записи чего-либо до вызова mlock () предотвратит выгрузку данных, но не может гарантировать, что данные не будут записаны на диск, если спящий режим, опосредованный ACPI S4 и ОС, невозможен и вы не находитесь в виртуальной машине (если вы находитесь в виртуальной машине, вы можете находиться под гипервизором типа 1 и, следовательно, подчиняться ограничениям виртуальной памяти хост-системы, которые вы не можете контролировать).

В результате правильное смягчение включает в себя:

  • Обработка на уровне приложения для предотвращения хранения конфиденциальных данных в ОЗУ дольше, чем это необходимо, даже если область заблокирована.
  • Обработка на системном уровне для отключения ACPI S4 (обычно требуется только в системах OEM), предотвращения спящего режима, связанного с ОС, и обеспечения доверия к хост-системе при работе в виртуальной машине.
У вас есть какие-нибудь указатели о том, где я мог бы узнать о политике Window? Awn 7 лет назад 0
Не с моей головы. Я проверил Linux, используя тестовую программу «голые кости» и некоторые креативные сценарии с контрольными группами для принудительной замены данных в программе. Утверждение о * BSD в основном основано на том факте, что Linux имеет тенденцию вести себя очень схоже с системами BSD при работе с подобными вещами, так что вы можете проверить это дважды. Austin Hemmelgarn 7 лет назад 1