Apa itu kernel yang tercemar di Linux?

99

Dalam kondisi tertentu, kernel Linux mungkin ternoda . Sebagai contoh, memuat driver video berpemilik ke dalam kernel menandai kernel. Kondisi ini dapat terlihat dalam log sistem, pesan kesalahan kernel (oops dan panik), dan melalui alat-alat seperti lsmod, dan tetap sampai sistem reboot.

Apa artinya ini? Apakah itu memengaruhi kemampuan saya untuk menggunakan sistem, dan bagaimana pengaruhnya terhadap opsi dukungan saya?

bwDraco
sumber
kemungkinan rangkap dari output lsmod: Tidak tercemar
Gilles
@Gilles, saya pikir pertanyaan yang Anda tautkan harus digabung menjadi yang ini. Juga, tidak jelas bahwa satu pertanyaan adalah duplikat dari yang lain.
bwDraco
1
Saya berharap menjadikan ini versi kanonik dari pertanyaan; lihat hasil edit terbaru untuk pertanyaan ini.
bwDraco
9
@MichaelMrozek: 1) Saya tidak melihat pertanyaan yang ada, karena tidak jelas bahwa pengguna bertanya "apa yang dimaksud dengan 'tercemar'", dan 2) pertanyaan seperti kata agak spesifik untuk satu perintah lsmod,. Saya menulis pertanyaan dan jawaban ini untuk membuatnya lebih umum sehingga seseorang yang bertanya "apa artinya 'ternoda' dapat menemukannya dengan mudah.
bwDraco
1
Mereka bisa menggunakan kata yang sedikit lebih netral daripada "ternoda".
Roger Dahl

Jawaban:

126

Ketika kernel ternoda, itu berarti ia dalam keadaan yang tidak didukung oleh komunitas . Sebagian besar pengembang kernel akan mengabaikan laporan bug yang melibatkan kernel yang tercemar, dan anggota komunitas dapat meminta Anda untuk memperbaiki kondisi yang mencemari sebelum mereka dapat melanjutkan dengan mendiagnosis masalah terkait dengan kernel. Selain itu, beberapa fungsi debugging dan panggilan API mungkin dinonaktifkan ketika kernel ternoda.

Dalam kebanyakan kasus yang melibatkan driver berpemilik, Anda dapat dengan aman mengabaikan kondisi noda , tetapi beberapa skenario yang menyebabkan kernel menjadi ternoda mungkin merupakan indikasi masalah sistem yang serius.

Fitur ini dimaksudkan untuk mengidentifikasi kondisi yang mungkin menyulitkan untuk memecahkan masalah kernel dengan benar. Sebagai contoh, pemuatan modul proprietary dapat membuat output debug kernel tidak dapat diandalkan karena pengembang kernel tidak memiliki akses ke kode sumber modul dan oleh karena itu tidak dapat menentukan apa yang mungkin telah dilakukan modul terhadap kernel. Demikian juga, jika kernel sebelumnya mengalami kondisi kesalahan atau jika kesalahan perangkat keras serius telah terjadi, informasi debug yang dihasilkan oleh kernel mungkin tidak dapat diandalkan.

Kernel mungkin ternoda karena beberapa alasan , termasuk (tetapi tidak terbatas pada) yang berikut ini:

  • Penggunaan modul kernel yang dipatenkan (atau tidak kompatibel dengan GPL) —ini adalah penyebab paling umum dari kernel yang tercemar dan biasanya merupakan hasil dari memuat NVIDIA atau driver video AMD.
  • Penggunaan driver staging , yang merupakan bagian dari kode sumber kernel tetapi tidak sepenuhnya diuji
  • Penggunaan modul out-of-tree yang tidak termasuk dalam kode sumber kernel Linux
  • Pemuatan atau pembongkaran modul kernel secara paksa (seperti memasukkan modul yang tidak dibangun untuk versi kernel saat ini)
  • Penggunaan kernel SMP (multiprosesor) pada CPU uniprosesor tertentu yang tidak didukung, terutama prosesor AMD Athlon yang lebih tua
  • Mengganti ACPI DSDT, terkadang diperlukan untuk mengoreksi bug manajemen daya (lihat di sini untuk detail)
  • Kondisi kesalahan kritis tertentu, seperti pengecualian pemeriksaan mesin dan oopses kernel
  • Bug serius tertentu dalam firmware sistem (BIOS, UEFI) yang harus dikerjakan oleh kernel

Masing-masing kondisi ini diwakili oleh flag tertentu di kernel. Beberapa vendor Linux, seperti SUSE, menambahkan tanda noda tambahan untuk menunjukkan kondisi seperti memuat modul yang tidak didukung oleh vendor.

Informasi lebih lanjut tersedia di dokumentasi kernel . Bendera bernoda terdaftar di sana (dengan _ stand-in untuk 'kosong')

  • G | P : G jika semua modul yang dimuat memiliki GPL atau lisensi yang kompatibel, jika tidak, modul berpemilik telah dimuat. Modul tanpa MODULE_LICENSE atau dengan MODULE_LICENSE yang tidak dikenali oleh insmod karena kompatibel dengan GPL dianggap milik.
  • F | _ : jika ada modul yang dimuat paksa oleh "insmod -f" jika tidak, jika semua modul dimuat secara normal.
  • S | _ : jika oops terjadi pada kernel SMP yang berjalan pada perangkat keras yang belum disertifikasi sebagai aman untuk menjalankan multiprosesor. Saat ini ini hanya terjadi pada berbagai Athlon yang tidak mampu SMP.
  • R | _ : jika suatu modul diturunkan secara paksa rmmod -f, sebaliknya jika semua modul dibongkar secara normal.
  • M | _ : jika ada prosesor yang melaporkan Pengecualian Pemeriksaan Mesin , jika tidak, tidak ada Pengecualian Pemeriksaan Mesin.
  • B | _ : jika fungsi pelepasan halaman menemukan referensi halaman yang salah atau beberapa flag halaman yang tidak terduga.
  • U | _ : jika pengguna atau aplikasi pengguna secara khusus meminta bendera Tainted diatur.
  • D | _ : jika kernel telah mati baru-baru ini, yaitu ada OOPS atau BUG.
  • A | _ : jika tabel ACPI telah diganti.
  • W | _ : jika peringatan sebelumnya telah dikeluarkan oleh kernel (Meskipun beberapa peringatan dapat mengatur bendera noda yang lebih spesifik.)
  • C | _ : jika driver pementasan telah dimuat.
  • I | _ : jika kernel mengatasi bug yang parah di firmware platform (BIOS atau yang serupa).
  • O | _ : jika modul yang dibangun secara eksternal ("out-of-tree") telah dimuat.
  • E | _ : jika modul yang tidak ditandatangani telah dimuat dalam tanda tangan modul penunjang kernel.
  • L | _ : jika terjadi soft lockup pada sistem.
  • K | _ : jika kernel telah ditambal langsung.
bwDraco
sumber
Jawaban ini kehilangan banyak informasi dari dup pertanyaan yang dipindahkan ini.
2
Saya akan menambahkan setidaknya satu kemungkinan penting dari skenario "modul tidak bertanda" - rootkit kernel dimuat ke dalam kernel atau exploit kernel baru saja dieksekusi.
kravietz