GNU/Linux >> Linux Esercitazione >  >> Linux

Esiste una distribuzione Linux o una patch del kernel che cancella lo spazio di memoria di un processo dopo che il processo è terminato?

Linux azzera (ovvero riempie di zeri) tutte le pagine di memoria non quando vengono rilasciate, ma quando vengono assegnate a un altro processo. Pertanto, nessun processo può ottenere estratti di dati da un altro processo. Tuttavia, le pagine manterranno i loro vecchi contenuti fino a quando non verranno riutilizzate. Non sono a conoscenza di alcuna patch che esegua l'azzeramento al rilascio della pagina (Modifica: come sottolinea @ user2313067 nella sua risposta, la patch PaX offre questa opzione, a un costo che può o meno essere un problema su un dato sistema); su base generale, sarebbe dannoso per le prestazioni perché riempirebbe le cache con gli zeri, eliminando più dati "utili" (e questo non conta lo spazio di swap, che probabilmente manca al tuo dispositivo embedded, ma la maggior parte dei sistemi Linux là fuori ha swap) .

Puoi forzare una sorta di cancellazione dei dati semplicemente allocando ogni possibile pagina 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 esegui questo programma come root , quindi prende tutta la memoria disponibile e la riempie (per forzare l'allocazione effettiva), uscendo solo quando non c'è più memoria. In esecuzione come root è necessario perché il kernel riserva le ultime pagine a root .

Si noti che il riempimento della memoria attiva le condizioni OOM, a quel punto il kernel si sente autorizzato a sparare ai processi per fare spazio. Ciò accade solo quando non è rimasta alcuna pagina libera, ovvero lo stato che si desidera ottenere (nessuna pagina libera rimasta significa che tutte le vecchie pagine sono state riallocate e quindi azzerate). È una sorta di suicidio per il sistema operativo, perché il codice di gestione di OOM può terminare alcuni processi essenziali (ci prova non farlo, ma hey, queste sono solo euristiche). Tuttavia, questo sembra appropriato nel tuo caso:se viene rilevata la manomissione, il dispositivo non ha altra scelta se non l'onorevole sventramento.

Quindi devi solo avviare la tua applicazione critica in un wrapper (un semplice script) che avvia il programma di cui sopra quando l'applicazione critica viene chiusa (presumibilmente a causa di manomissioni rilevate).


Grsecurity ha PAX_MEMORY_SANITIZE per farlo. Vedi l'opzione in questa pagina.


Linux
  1. Il kernel Linux:le 5 migliori innovazioni

  2. Linux:cosa sono la memoria alta e la memoria insufficiente su Linux?

  3. Linux - C'è un modo per identificare la velocità della tua memoria attraverso il software?

  4. Come posso riservare un blocco di memoria dal kernel Linux?

  5. Il kernel Linux 3.x utilizza lo scheduler del processo CFS?

Linux:cosa implica il layout della memoria del kernel virtuale in Dmesg?

Linux:esistono delle GUI per Linux che non utilizzano X11?

Linux Oom in modo casuale quando c'è ancora memoria libera?

Qual è l'attuale sorgente del kernel Linux?

Perché pr_debug del kernel Linux non fornisce alcun output?

Esiste un comando in Linux per conoscere il numero del processore in cui viene caricato un processo?