Google menemui beratus-ratus Kondisi Perlumbaan di Kernel Linux menggunakan KCSAN

Kernel Linux

Jurutera Google yang menyumbang kepada kernel Linux telah mengumumkan bahawa mereka telah menemui ratusan "Kondisi Perlumbaan", di dalam kernel menggunakan KCSAN. Syarikat telah lama mengusahakan AddressSanitizer untuk mencari ralat yang berkaitan dengan kerosakan memori atau UndefinedBehaviorSanitizer untuk tingkah laku yang tidak ditentukan dalam kod.

Kali ini, Google menawarkan pengesan “Race Conditions” baru untuk kernel Linux yang disebut KCSAN (Pembersih Kernel Concurrency). Kerentanan kritikal ini bukanlah perkara baru. Sebenarnya Keadaan Perlumbaan berlaku apabila dua atau lebih utas dalam proses yang sama mengakses lokasi memori yang sama secara serentak, di mana sekurang-kurangnya salah satu akses adalah untuk menulis, dan apabila utas tidak menggunakan kunci eksklusif untuk mengawal akses mereka ke memori ini.

Apabila syarat-syarat ini dipenuhi, pesanan akses tidak deterministik dan pengiraannya dapat memberikan hasil yang berbeza dari satu jalan ke jalan yang lain bergantung pada pesanan ini.

Kondisi Perlumbaan dilihat sebagai kesalahan akses serentak dan sukar diduplikasi dan mendiagnosis dalam program selari. Kernel Linux adalah sistem perisian berskala besar, di mana paralelisme intensif benang dan interleaving benang non-deterministik lebih tertakluk kepada keadaan kompetitif.

Beberapa situasi kompetitif boleh menjadi jinak, tetapi banyak dari mereka yang dikenal pasti setakat ini dianggap sebagai kesalahan.

Kernel Linux menyediakan beberapa mekanisme untuk mengelakkan dan menguruskan keadaan seperti ini Oleh kerana terdapat alat seperti Thread Analyzer atau KTSAN (Kernel Thread Sanitizer) untuk mengesan kesalahan pelaksanaan kritikal di Kernel Linux.

Namun, Google, yang turut menyumbang kepada kernel Linux, baru-baru ini mencadangkan KCSAN, pengesan Kondisi Perlumbaan baru untuk Kernel, serupa dengan KTSAN.

Menurut Google, KCSAN memberi tumpuan untuk menemui situasi kompetitif dalam kod kernel. Pengesan hit kritikal dinamik ini adalah alternatif kepada Kernel Thread Sanitizer (KTSAN).

Seperti penjelasan Google, KCSAN berdasarkan titik pemantauan pensampelan, tidak seperti pengesan KTSAN, yang merupakan pengesan perlumbaan kritikal sebelum acara. Keutamaan utama dalam reka bentuk KCSAN adalah kekurangan positif, skalabilitas, dan kesederhanaan.

KCSAN menggunakan alat penyusunan untuk mengakses memori. KCSAN serasi dengan penyusun GCC dan Clang. Dengan GCC, ia memerlukan versi 7.3.0 atau lebih baru dan dengan Clang, ia memerlukan versi 7.0.0 atau lebih baru.

Di halaman GitHub projekGoogle Marco Elver menulis bahawa menggunakan KCSAN dalam ujian bulan lalu, mereka mendapati hanya dalam dua hari lebih daripada 300 situasi persaingan teras yang unik. KCSAN menyediakan beberapa pilihan konfigurasi untuk menyesuaikan tingkah lakunya.

"Kami telah menggunakan KCSAN melalui Syzkaller selama beberapa minggu, dan kami telah menemui banyak bug. Pada mulanya pada bulan September 2019, kami mengenal pasti lebih dari 300 situasi persaingan yang unik hanya dalam dua hari, ”tulisnya.

Google mengatakan pendekatan keseluruhan berdasarkan DataCollider, pengesan dinamik lain dari situasi persaingan dalam modul kernel. Tetapi tidak seperti DataCollider, KCSAN tidak menggunakan titik pemantauan perkakasan, sebaliknya bergantung pada alat penyusunan.

Titik pemantauan dilaksanakan menggunakan pengekodan yang cekap yang menyimpan jenis, ukuran, dan alamat akses dalam file panjang. Manfaat menggunakan titik pemantauan fleksibel adalah mudah dibawa dan fleksibiliti yang lebih besar dalam mengehadkan akses yang dapat diaktifkan oleh titik pemantauan.

Berikut adalah beberapa perkara penting yang dibuat oleh KCSAN untuk Google:

  • Prestasi tinggi: Waktu operasi KCSAN adalah minimum dan tidak memerlukan penguncian keadaan bersama untuk setiap akses. Hasilnya adalah prestasi yang jauh lebih baik daripada KTSAN.
  • Tiada memori tambahan: menurut Google, tidak diperlukan cache. Pelaksanaan semasa menggunakan sebilangan kecil panjang untuk menyandikan maklumat titik pemantauan, yang tidak dapat diabaikan.
  • Perintah memori: KCSAN tidak mengetahui peraturan kawalan model memori kernel Linux (LKMM). Ini boleh menyebabkan perlumbaan kritikal hilang (negatif palsu) berbanding dengan pengesan perlumbaan pra-acara seperti KTSAN
  • Ketepatan: Menurut Google, KCSAN tidak tepat kerana menggunakan strategi persampelan;
  • Memerlukan penjelasan: anotasi minimum diperlukan di luar waktu operasi KCSAN. Dalam hal pendengar peristiwa prasyarat, sebarang peninggalan membawa kepada positif palsu, yang sangat penting dalam konteks kernel yang merangkumi mekanisme waktu khusus.
  • Pengesanan penulisan dinamik dari peranti: Dengan memeriksa nilai data semasa penyediaan titik pengawasan, penulisan dinamik dari peranti juga dapat dikesan.

Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab untuk data: AB Internet Networks 2008 SL
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.