Linux azzera (cioè riempie di zeri) tutte le pagine della memoria non quando vengono rilasciate, ma quando vengono date a un altro processo. Pertanto, nessun processo può ottenere estratti di dati da un altro processo. Tuttavia, le pagine manterranno il loro vecchio contenuto finché non saranno riutilizzate. Non sono a conoscenza di alcuna patch che esegue l'azzeramento alla versione della pagina ( Modifica: come @ user2313067 indica nella sua risposta, PaX patch offre questa opzione, ad un costo che può o non può essere un problema su un dato sistema); in generale, sarebbe dannoso per le prestazioni perché riempirebbe le cache con gli zeri, sfrattando dati più "utili" (e questo non conterebbe lo spazio di swap, che probabilmente manca al tuo dispositivo integrato, ma la maggior parte dei sistemi Linux là fuori ha swap) .
È possibile forzare una sorta di eliminazione dei dati semplicemente allocando ogni pagina possibile da un altro processo. Qualcosa del genere:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(void)
{
for (;;) {
void *x = malloc(2000);
if (x == NULL) {
break;
}
memset(x, 'T', 2000);
}
return 0;
}
Se si esegue questo programma come root
, quindi afferra tutta la memoria disponibile e la riempie (per forzare l'allocazione effettiva), uscendo solo quando non è rimasta memoria. È necessario eseguire root
perché il kernel riserva le ultime pagine a root
.
Nota che riempire la memoria attiva le condizioni OOM , a quel punto il kernel si sente autorizzato a riprendere i processi per fare qualche stanza Ciò accade solo quando non è rimasta alcuna pagina libera, ovvero lo stato che si desidera raggiungere (nessuna pagina libera a sinistra significa che tutte le vecchie pagine sono state riallocate e quindi azzerate). È una specie di suicidio per il sistema operativo, perché il codice di gestione di OOM può uccidere alcuni processi essenziali (non ci cerca , ma hey, questi sono solo euristiche). Tuttavia, questo sembra appropriato nel tuo caso: se viene rilevata la manomissione, il dispositivo non ha altra scelta tranne sventramento onorevole .
Quindi devi solo lanciare la tua applicazione critica in un wrapper (un semplice script) che avvia il programma di cui sopra quando l'applicazione critica si chiude (presumibilmente a causa di manomissioni rilevate).