Los pengembang proyek LLVM mengusulkan sejumlah perubahan yang bertujuan untuk memperkuat keamanan dari proyek-proyek C + + misi kritis dan menyediakan sarana untuk menghilangkan kesalahan yang disebabkan oleh buffer overruns.
Oleh karena itu, proposal yang mereka rilis berfokus pada pekerjaan di dua area khususnya: menyediakan model pengembangan yang memungkinkan bekerja secara aman dengan buffer dan bekerja untuk memperkuat keamanan pustaka fungsi standar libc++.
Disebutkan bahwa model pemrograman aman yang diusulkan untuk C++ «adalah menggunakan kelas yang disediakan oleh pustaka standar saat bekerja dengan buffer alih-alih memanipulasi pointer mentah». Misalnya, diusulkan untuk menggunakan kelas std::array, std::vector, dan std::span, yang akan ditambahkan dengan pemeriksaan runtime untuk memori yang dialokasikan di luar batas.
Tujuan kami adalah meningkatkan keamanan basis kode C++ yang penting. Untuk ini kami berencana untuk mengerjakan dua ide.
Pustaka Standar C++ yang Dikeraskan
Model Pemrograman Penyangga Aman C++ dan Alat Adopsi
Libc++ yang dikeraskan dimaksudkan untuk membuat antarmuka pustaka standar C++ lebih aman secara umum.Model pemrograman buffer aman C++ bersama dengan libc++ yang diperkeras menyediakan mitigasi runtime dari akses memori di luar batas. Alat adopsi akan mengotomatiskan migrasi kode ke model pemrograman baru ini.
Selain itu, juga disebutkan bahwa untuk memerangi praktik pemrograman "berbahaya" dalam dentang, jika mengusulkan untuk mengeluarkan peringatan kompiler untuk semua operasi aritmatika pointer, mirip dengan peringatan linter dentang-rapi saat menggunakan tanda "cppcoreguidelines-pro-bounds-pointer-arithmetic", dukungan yang akan muncul di LLVM 16. Untuk mengaktifkan peringatan tersebut, tanda terpisah akan ditambahkan ke dentang, tidak aktif secara default .
Direncanakan untuk menerapkan mode perlindungan opsional di libc++, yang, ketika diaktifkan, akan mendeteksi beberapa situasi yang mengarah ke perilaku tidak terdefinisi saat runtime. Misalnya, di kelas std::span dan std::vektor, akses di luar batas akan dipantau, dalam hal ini program akan gagal.
Pemeriksaan runtime tambahan ini akan dikelompokkan ke dalam beberapa kategori yang dapat dikontrol secara terpisah. Tujuannya adalah agar vendor yang mengirimkan libc++ pada platform mereka dapat memutuskan pemeriksaan mana yang akan diaktifkan di library pengiriman (jika ada), bergantung pada tingkat keamanan yang diinginkan.
Pengembang percaya bahwa menambahkan perubahan seperti itu akan membuat libc++ sesuai dengan standar C++, karena pilihan cara menangani kasus perilaku tidak terdefinisi terletak pada pengembang perpustakaan, yang dapat, antara lain, memperlakukan perilaku tidak terdefinisi sebagai kunci yang memerlukan program untuk KELUAR.
itu pemeriksaan runtime di libc++ direncanakan untuk dibagi menjadi beberapa kategori yang dapat dimasukkan satu per satu. Beberapa pemeriksaan yang disarankan yang tidak menghasilkan operasi yang lebih kompleks atau perubahan ABI sudah diterapkan dalam mode aman (mode aman) libc++.
Untuk mengulangi, tujuan utamanya adalah agar perpustakaan yang dikirimkan memungkinkan pemeriksaan ini dalam produksi; ini bukan fitur "debug saja", meskipun pada akhirnya akan menggantikan "mode debug" yang sudah lama rusak.
Selain itu, direncanakan untuk menyiapkan satu set alat koreksi kode yang akan memungkinkan variabel diganti dengan pointer mentah dalam kontainer dan untuk menerapkan penangan alternatif dalam situasi di mana kontainer tidak dapat secara langsung menggantikan pointer (misalnya, konstruksi "if(array_pointer)" dapat dikonversi menjadi "if(span.data ( )»).Pengaturan dapat diterapkan tidak hanya ke variabel lokal, tetapi juga untuk mengetik parameter dengan pointer.
Disebutkan juga bahwa sedang mempertimbangkan "pemeriksa penganalisis statis dentang" sensitif rute yang memperingatkan jika std::rentang dibangun dari wadah yang lebih kecil dari ukuran yang ditentukan dalam konstruktor rentang. Pemeriksa tersebut mandiri dan berguna dengan sendirinya, jika semuanya berjalan dengan baik, itu akan diaktifkan secara default untuk semua pengguna
Akhirnya jika Anda tertarik untuk mengetahui lebih banyak tentangnya, Anda dapat memeriksa detailnya di link berikut.