O que acontece quando você mlock (2) memória que já está trocada?

1

Pergunta simples, mas não consegui encontrar uma resposta.

Se há uma página na memória que já foi trocada para o disco pelo kernel e, em seguida, seu proprietário processa chamadas mlock (2) ou VirtualLock nessa página na memória, o que acontece?

É trocado de volta para a memória física imediatamente? É apagado do disco? Se alguém atrasar a gravação de informações confidenciais em uma página até que mlock (2) seja chamado, isso garantiria que ela não seja gravada no disco?

Como uma questão de acompanhamento menor, o que você faria para mitigar uma eventualidade?

    
por Awn 22.08.2017 / 10:27

1 resposta

1

Em uma versão upstream atual do kernel do Linux, ele forçará a devolução das páginas, mas parecerá deixar cópias na troca.

Acredito que a maioria dos sistemas BSD e outros sistemas UNIX se comportam de maneira semelhante, embora não tenham certeza sobre o Windows.

Atrasar a gravação de qualquer coisa até que mlock () seja chamado impedirá que os dados sejam trocados, mas não pode garantir que os dados não sejam gravados no disco, a menos que a hibernação mediada por ACPI S4 e SO não seja possível e você não esteja em uma VM (se você estiver em uma VM, você pode estar sob um hypervisor tipo 1 e, portanto, estar sujeito às restrições de memória virtual do sistema host, que você não pode controlar).

Como resultado, a mitigação adequada envolve:

  • Manipulação no nível do aplicativo para evitar que dados confidenciais residam na RAM por mais tempo do que o necessário, mesmo se a região estiver bloqueada.
  • Manipulação no nível do sistema para desabilitar o ACPI S4 (geralmente necessário apenas em sistemas OEM), impedir a hibernação mediada pelo sistema operacional e garantir a confiança no sistema host se estiver em execução em uma VM.
por 22.08.2017 / 14:50