Linux 6.2 Tampaknya Mengaktifkan “-funsigned-char” Untuk Menangani Kode Buggy dengan Lebih Baik

  • Post author:
  • Post category:Linux

Di antara permintaan penarikan awal yang dikirim sebelum pembukaan jendela penggabungan Linux 6.2 minggu depan adalah perubahan untuk mengaktifkan “-funsigned-char” secara default untuk pembuatan kernel Linux. Dalam persiapan untuk perubahan flag kompiler ini, beberapa perbaikan telah dilakukan bersamaan dengan banyak pengujian awal, sehingga setiap kejatuhan diharapkan minimal. Flag compiler “-funsigned-char” menjadikan semua tipe karakter “char” sebagai unsigned jika tidak ditentukan lain. Untuk kode kernel yang ditulis menggunakan tipe “char” biasa, perubahan ini ke depan akan secara universal memperlakukan tipe char default sebagai unsigned — daripada arsitektur CPU default / preferensi kompiler yang dapat ditandatangani atau tidak ditandatangani. Peneliti

Security dan pengembang utama WireGuard Jason Donenfeld memimpin pekerjaan pada konversi -funsigned-char dari kernel Linux. Dia mengirim permintaan penarikan awal yang memungkinkan perilaku karakter unsigned secara default serta berbagai perbaikan kernel di mana kode kernel telah membuat berbagai asumsi atas jenis karakter yang ditandatangani. Perbaikan tanda tangan karakter tambahan telah digabungkan untuk siklus Linux 6.1. Seperti apa yang Donenfeld kerjakan pada masalah penandaan karakter yang berantakan ini di dalam kernel, dia berkomentar dengan tambalan ini: Baru-baru ini, beberapa pemeriksaan waktu kompilasi yang saya tambahkan ke keluarga fungsi clamp_t memicu kesalahan pembangunan ketika driver yang ditulis dengan buruk dikompilasi di ARM, karena driver berasumsi bahwa tipe `char` telanjang ditandatangani, tetapi ARM memperlakukannya sebagai tidak ditandatangani, dan standar C mengatakan itu bergantung pada arsitektur. Saya ragu driver khusus ini adalah satu-satunya contoh di mana penulis yang tidak menaruh curiga membuat asumsi tentang `char` tanpa penentu `signed` atau `unsigned`. Kami cukup beruntung kali ini karena driver tersebut menggunakan `clamp_t(char, negative_value, positive_value)`, jadi kode pemeriksaan baru menemukannya, dan saya telah mengirim tambalan untuk memperbaikinya, tetapi kemungkinan ada tempat lain yang mengintai yang menang` tidak begitu mudah digali. Jadi mari kita hilangkan jenis bug heisensign ini sepenuhnya. Tetapkan `-funsigned-char` secara global, sehingga gcc membuat tipe tidak ditandatangani di semua arsitektur. Ini akan merusak beberapa hal di beberapa tempat dan memperbaiki beberapa hal di tempat lain, jadi ini kemungkinan akan menyebabkan sedikit churn saat merekonsiliasi penyalahgunaan jenis. Adapun prospek masalah dari perubahan mendasar ini, Donenfeld berkomentar dalam permintaan penarikan: Berbagai perbaikan adalah ditemukan dengan kombinasi keluaran objdump yang berbeda, berbagai macam skrip Coccinelle, dan grep tua biasa. Pada akhirnya, segala sesuatunya tidak tampak seburuk yang saya khawatirkan. Tapi tentu saja, mungkin juga saya melewatkan banyak hal. Namun, ini sudah ada di linux-next pada dasarnya untuk seluruh siklus sekarang, jadi saya tidak terlalu khawatir. Saya juga setiap hari mengendarai ini di laptop saya untuk semua 6.1. Tetap saja, seri ini, dan yang dikirim untuk 6.1 tidak berjumlah total seperti yang saya kira, jadi saya akan mencari kerusakan. Kami dapat menerima beberapa laporan yang dapat diperbaiki dengan cepat. Mudah-mudahan kami tidak akan menerima rentetan laporan yang akan mengakibatkan pengembalian. Dan mungkin saja kami tidak akan menerima laporan sama sekali dan bahkan tidak ada yang akan menyadarinya. Amit-amit.

Itulah berita seputar Linux 6.2 Tampaknya Mengaktifkan “-funsigned-char” Untuk Menangani Kode Buggy dengan Lebih Baik, semoga bermanfaat. Disadur dari Phoronix.com.