Bagaimana cara memeriksa apakah kernel Linux “Retpoline” diaktifkan atau tidak?

17

Adapun kerentanan keamanan "Spectre", "Retpoline" diperkenalkan sebagai solusi untuk mengurangi risiko. Namun, saya sudah membaca posting yang menyebutkan:

Jika Anda membangun kernel tanpa CONFIG_RETPOLINE, Anda tidak dapat membangun modul dengan retpoline dan kemudian mengharapkan mereka memuat - karena simbol thunk tidak diekspor.

Jika Anda membangun kernel dengan retpoline, Anda dapat berhasil memuat modul yang tidak dibangun dengan retpoline. ( Sumber )

Apakah ada cara umum / generik / terpadu yang mudah dan umum untuk memeriksa apakah kernel "Retpoline" diaktifkan atau tidak? Saya ingin melakukan ini agar installer saya dapat menggunakan modul kernel yang tepat untuk diinstal.

Weishan Yang
sumber

Jawaban:

21

Jika Anda menggunakan kernel arus utama, atau kernel distribusi yang paling utama, cara terbaik untuk memeriksa dukungan penuh retpoline ( yaitu kernel yang dikonfigurasi dengan CONFIG_RETPOLINE, dan dibangun dengan kompiler yang mampu retpoline) adalah mencari “Retpoline generik lengkap” ”di /sys/devices/system/cpu/vulnerabilities/spectre_v2. Di sistem saya:

$ cat /sys/devices/system/cpu/vulnerabilities/spectre_v2
Mitigation: Full generic retpoline, IBPB, IBRS_FW

Jika Anda ingin tes yang lebih komprehensif, untuk mendeteksi retpoline pada kernel tanpa spectre_v2file systree, periksa bagaimana spectre-meltdown-checkerkelanjutannya.

Stephen Kitt
sumber
2
Untuk memeriksa kerentanan terkait kehancuran / momok lainnya, jalankan $ grep . /sys/devices/system/cpu/vulnerabilities/*, yang disarankan dalam blog Greg Kroah-Hartman .
Alex Vong
1
Terima kasih @Alex; Saya menjawab pertanyaan spesifik, tapi itu berguna - walaupun saya lebih suka head /sys/devices/system/cpu/vulnerabilities/*diri sendiri ;-). Yang saat ini mencakup kerentanan Meltdown / Specter, tetapi juga harus mencakup kerentanan masa depan yang sifatnya serupa (namespace sengaja dibuat generik).
Stephen Kitt
@StephenKitt Ya, headmemberikan output yang diformat lebih bagus.
Alex Vong
4

Jawaban Stephen Kitt lebih komprehensif dalam kasus khusus ini, karena dukungan retpoline juga memerlukan versi kompiler baru.

Tetapi dalam kasus umum, sebagian besar distribusi memiliki file konfigurasi kernel yang tersedia di salah satu lokasi berikut:

  • /boot/config-4.xx.xx-...
  • /proc/config.gz

Maka Anda bisa saja zgrep CONFIG_RETPOLINE /boot/config* /proc/config.gz

jpa
sumber
4
Saya merekomendasikan untuk tidak masuk /boot/config*, karena itu mungkin ditemukan CONFIG_RETPOLINEpada gambar kernel yang diinstal tetapi saat ini tidak berjalan, memberikan rasa aman yang salah. Memeriksa /proc/config.gzatau /sys/...aman, tetapi banyak distribusi Linux mengkompilasi kernel tanpa /proc/config.gz.
Poin
Bisakah Anda membuat logika sedikit lebih pintar dan menggunakan uname (atau syscall yang setara) untuk mendapatkan kernel yang sedang berjalan dan kemudian memeriksa file / boot / config tertentu?
Adam Luchjenbroers
@ pts /boot/config-$(uname -r), kalau begitu?
muru
2
Menggunakannya /boot/config-$(uname -r)juga tidak mudah untuk dibuktikan: itu masih tidak menjamin bahwa konfigurasi cocok dengan kernel yang sedang berjalan. Kernel distro tetap sama uname -rdi beberapa versi, selama kernel ABI tidak berubah.
Stephen Kitt
Terima kasih atas balasan Anda. Jawaban dan pesan Anda sangat membantu.
Weishan Yang