Com a única exceção da hibernação, o mlock () garante manter a memória na RAM no Linux. Isso pode ser comprovado simplesmente chamando malloc () para alocar um pedaço de memória do mesmo tamanho que sua memória livre, chamando mlock (), e então forçando cada página a ser criticada (não faça isso em uma produção). sistema, ele irá disparar o assassino OOM, e que não pode escolher o seu programa de teste para colher). Assim, além da hibernação, você pode confiar no mlock ().
A hibernação fica complicada, mas existem maneiras de lidar com isso parcialmente. Supondo que seu modelo de ameaça confie no usuário root
(e você meio que precise), será possível conectar-se ao systemd para bloquear a hibernação enquanto tiver dados confidenciais na memória. Tenha em mente que isso não é perfeito, mas é provavelmente o mais próximo que você pode conseguir. Alternativamente, acho que você pode registrar um gancho para notificar seu programa se a hibernação for iniciada e limpar sua memória sensível, mas não tenho 100% de certeza sobre isso.
Apesar disso, você pode estar pensando demais sobre isso.
Se você está apenas escrevendo software genérico e tem zero controle de plataforma (pense em algo como GPG ou OpenSSL), você deve apenas assumir que seus usuários saibam o risco, mlock () as áreas apropriadas de memória (ou melhor ainda, opção para fazê-lo para que as pessoas com transiente criptografado (zram pensar) ou criptografado possam optar por não receber o uso de recursos) e conclua o processo. Tenha em mente também que, embora o suporte de hibernação nativa do kernel seja um problema de segurança (e muito bem documentado), as implementações de espaço do usuário (como o µswsusp) geralmente têm suporte a criptografia integrada.
Se, no entanto, você estiver lidando com algo em que você controla o SO, o software será executado, você pode simplesmente criar seu próprio kernel com o suporte de hibernação desabilitado.