Untuk Linux 5.18 direncanakan untuk memindahkan kode ke versi C yang lebih baru untuk menyelesaikan berbagai masalah. 

Apa itu Linux dan untuk apa?

Selama proses diskusi pengembang dari kernel linux tentang danl tema dari satu set patch untuk memperbaiki kerentanan dari Spectre dalam kode untuk bekerja dengan daftar tertaut, itu menjadi jelas bagi banyak pengembang bahwa masalahnya dapat diselesaikan dengan lebih mudah jika diizinkan dalam kode kernel C que sesuai dengan versi standar yang lebih baru. 

Dan saat ini kode yang ditambahkan ke Kernel Linux harus sesuai dengan spesifikasi ANSI C (C89), yang dibentuk pada tahun 1989.

Itulah sebabnya masalah yang berhubungan dengan Spectre dalam kode itu karena se terus menggunakan iterator didefinisikan secara terpisah setelah loop.

Meskipun sifatnya umumnya cepat, proyek kernel bergantung pada sejumlah alat yang lebih tua. Sementara kritikus ingin fokus pada penggunaan email yang ekstensif oleh komunitas, anakronisme yang mungkin lebih signifikan adalah penggunaan standar bahasa C versi 1989 untuk kode kernel, standar yang dikodifikasikan sebelum proyek kernel dimulai lebih dari 30 tahun yang lalu. Sepertinya praktik lama itu bisa berakhir segera setelah kernel 5.18, diharapkan pada bulan Mei tahun ini.

Disebutkan itu makro digunakan untuk mengulangi elemen daftar tertaut, dan karena iterator loop diteruskan ke makro ini, itu didefinisikan di luar loop itu sendiri dan tetap tersedia setelah loop. Menggunakan standar C99 akan memungkinkan pengembang untuk mendefinisikan variabel untuk loop di blok for(), yang akan menyelesaikan masalah tanpa menemukan solusi.

Sayangnya, ada beberapa lokasi di kernel tempat daftar
iterator digunakan setelah loop yang rusak pada perubahan seperti itu. Untung
ada skrip use_after_iter.cocci yang dapat digunakan untuk mengidentifikasi seperti itu
lokasi kode. Saya harus menyesuaikan skrip sedikit karena mengurangi kesalahan
positif dalam kasus penggunaan asli, tetapi itu relevan dengan tambalan ini.

Berbagai macam lokasi kode yang dilaporkan hanya menggunakan iterator daftar setelah
siklus jika ada jalan keluar lebih awal (break/goto) dan karena itu tidak
relevan.

Untuk bagiannya, Linus Torvalds setuju dengan ide itu untuk dapat mengimplementasikan dukungan untuk spesifikasi yang lebih baru dan selanjutnya disarankan untuk pindah ke kernel 5.18 untuk menggunakan standar C11, yang dirilis pada tahun 2011.

Setelah itu, selama verifikasi awal, pemasangan ke GCC dan Dentang dalam mode baru berlalu tanpa penyimpangan. Kecuali jika masalah tak terduga muncul karena pengujian yang lebih ekstensif, skrip pembuatan kernel 5.18 akan mengubah opsi '–std=gnu89' menjadi '–std=gnu11 -Wno-shift-negative-value'.

Linus Torvalds tidak terlalu menyukai patch tersebut dan tidak melihat bagaimana patch tersebut terkait dengan kerentanan eksekusi spekulatif. Namun, setelah Koschel menjelaskan lebih lanjut situasinya, Torvalds setuju bahwa "ini hanya bug biasa, sederhana dan sederhana" dan mengatakan bahwa itu harus diperbaiki terlepas dari seri yang lebih besar. Tapi kemudian dia menyelidiki sumber sebenarnya dari masalah: bahwa iterator yang diteruskan ke daftar makro traversal harus dideklarasikan dalam lingkup di luar loop itu sendiri:

Alasan utama jenis kesalahan nonspekulatif ini dapat terjadi adalah karena secara historis kami tidak memiliki "deklarasi variabel dalam loop" gaya C99. Jadi list_for_each_entry() - dan yang lainnya - pada dasarnya selalu memfilter entri HEAD terakhir dari loop, hanya karena kita tidak dapat mendeklarasikan variabel iterator dalam loop itu sendiri.

Itu juga layak untuk disebutkan kemungkinan menggunakan standar C17 dipertimbangkan, tetapi dalam hal ini perlu untuk meningkatkan versi GCC yang didukung minimum, karena penyertaan dukungan untuk C11 sesuai dengan persyaratan saat ini untuk versi GCC (5.1).

Akhirnya jika Anda tertarik untuk mengetahui lebih banyak tentangnya, Anda dapat memeriksa detailnya di link berikut.


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.