Что происходит, когда вы mlock(2) памяти, которая уже поменялась?
Простой вопрос, но я не смог найти ответ.
Если в памяти есть страница, которая уже была выгружена ядром на диск, а затем ее владелец вызывает mlock(2) или VirtualLock на этой странице в памяти, что произойдет?
Он сразу же переключается на физическую память? Это стерто с диска? Если кто-то задерживает запись конфиденциальной информации на страницу до тех пор, пока не будет вызван mlock(2), будет ли это гарантировать, что она не будет записана на диск?
В качестве незначительного дополнительного вопроса, что бы вы сделали, чтобы смягчить против такой возможности?
1 ответ
В текущей исходной версии ядра Linux это приведет к сбоям страниц, но, похоже, их копии останутся подкачкой.
Я полагаю, что большинство систем BSD и других систем UNIX ведут себя одинаково, хотя не уверен насчет Windows.
Задержка записи чего-либо до вызова mlock() предотвратит выгрузку данных, но не может гарантировать, что данные не будут записаны на диск, если спящий режим, опосредованный ACPI S4 и ОС, невозможен и вы не находитесь в виртуальной машине (если вы находитесь в виртуальной машине, вы можете находиться под гипервизором типа 1 и, следовательно, подчиняться ограничениям виртуальной памяти хост-системы, которые вы не можете контролировать).
В результате правильное смягчение включает в себя:
- Обработка на уровне приложения для предотвращения хранения конфиденциальных данных в ОЗУ дольше, чем это необходимо, даже если область заблокирована.
- Обработка на системном уровне для отключения ACPI S4 (обычно требуется только в системах OEM), предотвращения спящего режима, связанного с ОС, и обеспечения доверия к хост-системе при работе в ВМ.