Linux pone a cero (es decir, rellena con ceros) todas las páginas de la memoria, no cuando se liberan, sino cuando se asignan a otro proceso. Por lo tanto, ningún proceso puede obtener extractos de datos de otro proceso. Sin embargo, las páginas conservarán su contenido anterior hasta que sean reutilizadas. No tengo conocimiento de ningún parche que haga la reducción a cero en el lanzamiento de la página ( Editar: como @ user2313067 señala en su respuesta, PaX parche ofrece esta opción, a un costo que puede o no ser un problema en cualquier sistema dado); en general, sería perjudicial para el rendimiento, ya que llenaría los cachés con los ceros, desalojando datos más "útiles" (y eso no es contar el espacio de intercambio, que probablemente carece de su dispositivo integrado, pero la mayoría de los sistemas Linux tienen intercambio) .
Puede forzar una especie de borrado de datos simplemente asignando cada página posible de otro proceso. Algo como esto:
#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;
}
Si ejecuta este programa como root
, entonces toma toda la memoria disponible y la llena (para forzar la asignación real), saliendo solo cuando no queda memoria. Se necesita ejecutar root
porque el kernel reserva las últimas páginas a root
.
Tenga en cuenta que al rellenar la memoria se activan las condiciones de OOM , momento en el que el núcleo se siente capaz de disparar procesos para hacer alguna habitacion Esto sucede solo cuando no queda ninguna página libre, es decir, el estado que desea lograr (no queda ninguna página libre significa que todas las páginas antiguas se han reasignado y, por lo tanto, se han eliminado). Es un tipo de suicidio para el sistema operativo, ya que el código de manejo de OOM puede matar algunos procesos esenciales ( intenta no, pero bueno, estos son solo heurísticos). Sin embargo, esto parece apropiado en su caso: si se detecta una manipulación indebida, el dispositivo no tiene otra opción excepto desembarco honorable .
Entonces, solo tiene que iniciar su aplicación crítica en un envoltorio (una secuencia de comandos simple) que inicia el programa anterior cuando la aplicación crítica sale (probablemente debido a una manipulación detectada).