GNU/Linux >> Belajar Linux >  >> Linux

Apakah ada distro Linux atau tambalan kernel yang menghapus ruang memori proses setelah proses keluar?

Linux mem-nolkan (yaitu mengisi dengan nol) semua halaman memori bukan saat dirilis, tetapi saat diberikan ke proses lain. Dengan demikian, tidak ada proses yang dapat memperoleh kutipan data dari proses lain. Namun, halaman tersebut akan mempertahankan konten lamanya hingga digunakan kembali. Saya tidak mengetahui adanya tambalan yang melakukan zeroing on page release (Edit: seperti yang ditunjukkan oleh @ user2313067 dalam jawabannya, tambalan PaX menawarkan opsi ini, dengan biaya yang mungkin atau mungkin tidak menjadi masalah pada sistem apa pun); secara umum, ini akan merusak kinerja karena akan mengisi cache dengan nol, mengeluarkan lebih banyak data "berguna" (dan itu tidak termasuk ruang swap, yang mungkin tidak dimiliki perangkat tersemat Anda, tetapi sebagian besar sistem Linux di luar sana memiliki swap) .

Anda dapat memaksa semacam penghapusan data hanya dengan mengalokasikan setiap halaman yang mungkin dari proses lain. Sesuatu seperti ini:

#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;
}

Jika Anda menjalankan program ini sebagai root , lalu mengambil semua memori yang tersedia dan mengisinya (untuk memaksa alokasi aktual), keluar hanya jika tidak ada memori yang tersisa. Berjalan sebagai root diperlukan karena kernel mencadangkan beberapa halaman terakhir ke root .

Perhatikan bahwa mengisi memori memicu kondisi OOM, di mana kernel merasa diizinkan untuk memotret proses untuk membuat ruang. Ini terjadi hanya jika tidak ada halaman kosong yang tersisa, yaitu keadaan yang ingin Anda capai (tidak ada halaman kosong yang tersisa berarti semua halaman lama telah dialokasikan kembali, dan oleh karena itu dikosongkan). Ini semacam bunuh diri untuk OS, karena kode penanganan OOM dapat mematikan beberapa proses penting (ia mencoba tidak, tapi hei, ini hanya heuristik). Namun, ini tampaknya sesuai untuk kasus Anda:jika perusakan terdeteksi, perangkat tidak memiliki pilihan selain mengeluarkan isi perut secara terhormat.

Jadi, Anda hanya perlu meluncurkan aplikasi penting dalam pembungkus (skrip sederhana) yang meluncurkan program di atas saat aplikasi penting ditutup (mungkin karena gangguan yang terdeteksi).


Grsecurity memiliki PAX_MEMORY_SANITIZE untuk melakukan ini. Lihat opsi di halaman ini.


Linux
  1. Linux – Apa Memori Tinggi dan Memori Rendah Di Linux?

  2. Linux – Mengapa Ada Kebijakan Kernel Linux Untuk Tidak Pernah Melanggar Ruang Pengguna?

  3. Linux - Apakah ada cara untuk mengidentifikasi kecepatan memori Anda melalui perangkat lunak?

  1. Linux – Apa yang Disiratkan oleh Tata Letak Memori Kernel Virtual Di Dmesg?

  2. Linux – Apakah Ada Gui Untuk Linux yang Tidak Menggunakan X11?

  3. Bagaimana cara kerja copy_from_user dari kernel Linux secara internal?

  1. Apa sumber kernel Linux saat ini?

  2. Menemukan proses yang menggunakan port tertentu di Linux

  3. Bagaimana saya bisa memesan satu blok memori dari kernel Linux?