Setelah enam bulan pengembangan, perpustakaan sistem GNU C Library (glibc) 2.35 telah dirilis, yang sepenuhnya memenuhi persyaratan standar ISO C11 dan POSIX.1-2017. Rilis baru ini mencakup perbaikan dari 66 pengembang.
Beberapa perbaikan yang diterapkan pada Glibc 2.35 antara lain:
- Dukungan untuk lokal "C.UTF-8" telah ditambahkan, yang mencakup aturan kolasi untuk semua titik kode Unicode, tetapi untuk menghemat ruang, membatasi penggunaan rentang ASCII dalam fungsi fnmatch, regexec, dan regcomp. Lokal ini membutuhkan sekitar 400 KB, dengan 346 KB di antaranya merupakan data LC_CTYPE untuk Unicode, dan memerlukan instalasi terpisah (tidak terintegrasi dengan Glibc).
- Data pengkodean, informasi tipe karakter, dan tabel transliterasi telah diperbarui untuk mendukung spesifikasi Unicode 14.0.0.
- DI DALAM Dan Fungsi dan makro yang membulatkan hasil ke tipe yang lebih sempit telah diimplementasikan: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfmafNx, fMxfmafN, dan fMxfmafNx. Fungsi-fungsi ini dijelaskan dalam spesifikasi TS 18661-1:2014 dan TS 18661-3:2015 dan telah ditambahkan ke draf standar ISO C2X C yang akan datang.
- DI DALAM Dan Fungsi dan makro untuk menemukan minimum dan maksimum bilangan floating-point dari tipe float, long double, _FloatN, dan _FloatNx, yang dijelaskan dalam spesifikasi IEEE 754-2019 dan ditambahkan ke draf standar C ISO C2X mendatang, telah diimplementasikan: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
- DI DALAM Menambahkan konstanta untuk bilangan floating-point presisi tunggal: M_Ef, M_LOG2Ef, M_LOG10Ef, M_LN2f, M_LN10f, M_PIf, M_PI_2f, M_PI_4f, M_1_PIf, M_2_PIf, M_2_SQRTPIf, M_SQRT2f dan M_SQRT1_2f.
- Untuk fungsi exp10 di file header Menambahkan makro terkait yang tidak terikat pada tipe tertentu.
- DI DALAM Menambahkan makro _PRINTF_NAN_LEN_MAX yang diusulkan dalam draf standar ISO C2X.
- Keluarga fungsi printf sekarang memiliki penentu format "%b" dan "%B" untuk mencetak bilangan bulat dalam representasi biner.
- Sistem penautan dinamis mengimplementasikan algoritma pengurutan DSO baru, yang menggunakan pencarian mendalam (DFS) untuk mengatasi masalah kinerja saat menangani dependensi siklik. Parameter glibc.rtld.dynamic_sort tersedia untuk memilih algoritma pengurutan DSO. Mengaturnya ke "1" akan kembali ke algoritma lama.
- ABI sekarang mendukung fungsi baru, '__memcmpeq', yang digunakan oleh kompiler untuk mengoptimalkan penggunaan 'memcmp' ketika nilai pengembalian fungsi tersebut hanya digunakan untuk memeriksa status penyelesaian suatu operasi.
- Menambahkan dukungan untuk pendaftaran thread otomatis menggunakan panggilan sistem rseq (restartable sequences) yang disediakan sejak kernel. Linux 4.18. Panggilan sistem rseq memungkinkan eksekusi berkelanjutan dari sekelompok instruksi, tanpa gangguan dan mengkonfirmasi hasil instruksi terakhir dalam kelompok tersebut. Pada dasarnya, ini menyediakan cara untuk eksekusi operasi yang sangat cepat dan atomik, yang, jika diganggu oleh thread lain, akan dihapus dan dicoba ulang.
- Menambahkan tautan simbolis /usr/bin/ld.so.
- Semua file yang dapat dieksekusi firmware dan rangkaian pengujian kini dibangun dalam mode eksekusi independen posisi (PIE) secara default. Opsi "--disable-default-pie" tersedia untuk menonaktifkan perilaku ini.
- Untuk Linux Menambahkan pengaturan glibc.malloc.hugetlb yang memungkinkan Anda untuk beralih implementasi malloc untuk menggunakan panggilan sistem madvise dengan flag MADV_HUGEPAGE untuk mmap dan sbrk, atau untuk langsung menggunakan halaman memori besar dengan menentukan flag MAP_HUGETLB dalam panggilan mmap. Opsi pertama memungkinkan peningkatan kinerja saat menggunakan Halaman Besar Transparan dalam mode madvise, sedangkan opsi kedua memungkinkan penggunaan halaman besar yang dicadangkan sistem.
- Menambahkan fungsi _dl_find_object, yang dapat digunakan untuk menambahkan informasi pelepasan.
- Menambahkan dukungan untuk arsitektur OpenRISC (or1k-linux-gnu) dalam mode soft-float. Port ini membutuhkan binutils 2.35, GCC 11, dan kernel. Linux 5.4.
- Menambahkan tanda kompilasi "--with-rtld-early-cflags" yang memungkinkan Anda menentukan tanda kompilasi tambahan untuk digunakan saat membangun kode awal untuk penautan dinamis.
- Untuk platform Linux Menambahkan fungsi epoll_pwait2, yang berbeda dari epoll_wait karena menentukan batas waktu dengan presisi nanodetik.
- Menambahkan fungsi posix_spawn_file_actions_addtcsetpgrp_np untuk menghilangkan kondisi balapan saat mengatur terminal pengendali untuk proses baru.
- Untuk aplikasi yang dikompilasi dengan Glibc dan GCC 12+, mode perlindungan "_FORTIFY_SOURCE=3" telah diimplementasikan. Mode ini mendeteksi potensi luapan buffer saat menjalankan fungsi string yang didefinisikan dalam berkas header string.h. Mode ini berbeda dari mode "_FORTIFY_SOURCE=2" karena memperkenalkan pemeriksaan tambahan yang berpotensi menyebabkan penurunan kinerja.
- Dukungan untuk Intel MPX (Memory Protection Extensions), yang digunakan untuk memeriksa petunjuk guna mematuhi batasan memori, telah dihentikan (teknologi ini belum diadopsi secara luas dan telah dihapus dari GCC dan LLVM).
- Mekanisme prelink dan variabel lingkungan terkaitnya LD_TRACE_PRELINKING dan LD_USE_LOAD_BIAS telah ditinggalkan dan akan dihapus dalam rilis mendatang.
Kerentanan diperbaiki:
- CVE-2022-23218, CVE-2022-23219 — luapan buffer pada fungsi svcunix_create dan clnt_create yang disebabkan oleh penyalinan isi parameter nama berkas ke tumpukan tanpa memeriksa ukuran data yang disalin. Untuk aplikasi yang dibangun tanpa perlindungan tumpukan dan menggunakan protokol "unix", kerentanan ini dapat menyebabkan eksekusi kode berbahaya saat memproses nama berkas yang sangat panjang.
- CVE-2021-3998 adalah kerentanan pada fungsi realpath() yang disebabkan oleh pengembalian nilai tidak valid yang berisi data residu yang belum dihapus dari tumpukan dalam kondisi tertentu. Untuk program fusermount yang berakar SUID, kerentanan ini dapat dieksploitasi untuk mendapatkan informasi sensitif dari memori proses, seperti informasi penunjuk.
- CVE-2021-3999 — Luapan buffer satu byte dalam fungsi getcwd(). Masalah ini disebabkan oleh bug yang telah ada sejak tahun 1995. Untuk memicu luapan ini, cukup dengan menjalankan panggilan chdir() pada direktori "/" di namespace titik pemasangan yang terpisah.
Sumber: opennet.ru
