Google menemukan ratusan Kondisi Balapan di Kernel Linux menggunakan KCSAN

Kernel Linux

Teknisi Google yang berkontribusi pada kernel Linux telah mengumumkan bahwa mereka telah menemukan ratusan "Ketentuan Balapan", di kernel menggunakan KCSAN. Perusahaan telah lama mengerjakan AddressSanitizer untuk menemukan kesalahan terkait kerusakan memori atau UndefinedBehaviorSanitizer untuk perilaku tidak terdefinisi dalam kode.

Kali ini, Google menawarkan detektor "Ketentuan Balapan" baru untuk kernel Linux yang disebut KCSAN (Kernel Concurrency Sanitizer). Kerentanan kritis ini bukanlah hal baru. Sebenarnya Kondisi Balapan terjadi ketika dua atau lebih utas dalam proses yang sama mengakses lokasi memori yang sama secara bersamaan, di mana setidaknya salah satu aksesnya adalah untuk menulis, dan ketika utas tidak menggunakan kunci eksklusif apa pun untuk mengontrol akses mereka ke memori ini.

Jika kondisi ini terpenuhi, urutan akses tidak deterministik dan kalkulasi dapat memberikan hasil yang berbeda dari satu proses ke proses lainnya tergantung pada urutan ini.

Kondisi Balapan semakin dilihat sebagai kesalahan akses bersamaan dan sulit untuk diduplikasi dan mendiagnosis dalam program paralel. Kernel Linux adalah sistem perangkat lunak berskala besar, di mana paralelisme intensif thread dan interleaving thread non-deterministik lebih tunduk pada kondisi persaingan.

Beberapa situasi persaingan mungkin tidak berbahaya, tetapi banyak di antaranya yang teridentifikasi sejauh ini dianggap sebagai kesalahan.

Kernel Linux menyediakan beberapa mekanisme untuk menghindari dan mengelola jenis kondisi ini Karena ada alat seperti Thread Analyzer atau KTSAN (Kernel Thread Sanitizer) untuk mendeteksi kesalahan eksekusi kritis di Kernel Linux.

Namun, Google, yang juga berkontribusi pada kernel Linux, baru-baru ini mengusulkan KCSAN, detektor Kondisi Ras baru untuk Kernel, mirip dengan KTSAN.

Menurut Google, KCSAN berfokus pada penemuan situasi persaingan dalam kode kernel. Detektor hit kritis dinamis ini merupakan alternatif dari Kernel Thread Sanitizer (KTSAN).

Sesuai penjelasan Google, KCSAN didasarkan pada titik pemantauan pengambilan sampel, tidak seperti detektor KTSAN, yang merupakan pendeteksi stroke kritis sebelum kejadian. Prioritas utama dalam desain KCSAN adalah kurangnya kesalahan positif, skalabilitas, dan kesederhanaan.

KCSAN menggunakan alat kompilasi untuk mengakses memori. KCSAN kompatibel dengan kompiler GCC dan Clang. Dengan GCC, ini membutuhkan versi 7.3.0 atau yang lebih baru dan dengan Clang, ini membutuhkan versi 7.0.0 atau yang lebih baru.

Di halaman GitHub proyekGoogle Marco Elver menulis bahwa menggunakan KCSAN dalam pengujian bulan lalu, mereka menemukan hanya dalam dua hari lebih dari 300 situasi persaingan inti yang unik. KCSAN menyediakan beberapa opsi konfigurasi untuk menyesuaikan perilakunya.

“Kami telah menggunakan KCSAN melalui Syzkaller selama beberapa minggu, dan kami menemukan banyak bug. Awalnya pada September 2019, kami mengidentifikasi lebih dari 300 situasi persaingan unik hanya dalam dua hari, ”tulisnya.

Google mengatakan pendekatan keseluruhan didasarkan pada DataCollider, Detektor dinamis lain dari situasi kompetitif dalam modul kernel. Tetapi tidak seperti DataCollider, KCSAN tidak menggunakan titik pemantauan perangkat keras, melainkan mengandalkan alat kompilasi.

Titik pemantauan diimplementasikan menggunakan pengkodean efisien yang menyimpan jenis, ukuran, dan alamat akses dalam file yang panjang. Manfaat menggunakan titik pemantauan yang fleksibel adalah portabilitas dan fleksibilitas yang lebih besar dalam membatasi akses yang dapat diaktifkan oleh titik pemantauan.

Berikut adalah beberapa poin penting yang dibuat KCSAN untuk Google:

  • Performa tinggi: Waktu proses KCSAN minimal dan tidak memerlukan penguncian status bersama untuk setiap akses. Hasilnya kinerja yang jauh lebih baik dari KTSAN.
  • Tidak ada memori tambahan: menurut Google, tidak diperlukan cache. Implementasi saat ini menggunakan sejumlah kecil panjang untuk menyandikan informasi titik pemantauan, yang dapat diabaikan
  • Perintah memori: KCSAN tidak mengetahui aturan kontrol model memori kernel Linux (LKMM). Hal ini dapat mengakibatkan balapan kritis hilang (negatif palsu) dibandingkan dengan pendeteksi balapan sebelum acara seperti KTSAN
  • Akurasi: Menurut Google, KCSAN tidak tepat karena menggunakan strategi pengambilan sampel;
  • Membutuhkan anotasi: anotasi minimal diperlukan di luar runtime KCSAN. Dalam kasus event listener prasyarat, setiap kelalaian mengarah ke positif palsu, yang sangat penting dalam konteks kernel yang menyertakan mekanisme pengaturan waktu kustom.
  • Deteksi penulisan dinamis dari perangkat: Dengan memeriksa nilai data selama penyiapan watchpoint, penulisan dinamis dari perangkat juga dapat dideteksi.

tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Bertanggung jawab atas data: AB Internet Networks 2008 SL
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.