Rilis Perpustakaan Sistem Glibc 2.35

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:

  • Menambahkan dukungan untuk lokal "C.UTF-8", yang mencakup aturan susunan untuk semua kode Unicode, tetapi untuk menghemat ruang, penggunaan rentang ASCII dalam fungsi fnmatch, regexec, dan regcomp dibatasi. Lokalnya berukuran sekitar 400 KB, dimana 346 KB di antaranya adalah data LC_CTYPE untuk Unicode, dan memerlukan instalasi terpisah (tidak terpasang di Glibc).
  • Data pengkodean, informasi tipe karakter, dan tabel transliterasi telah diperbarui untuk mendukung spesifikasi Unicode 14.0.0.
  • DI DALAM Dan fungsi dan makro diimplementasikan untuk membulatkan hasil ke tipe yang lebih sempit: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfmafNx, fMxfmafN dan fMxfmafNx. Fungsinya dijelaskan dalam spesifikasi TS 18661-1:2014, TS 18661-3:2015 dan ditambahkan ke rancangan standar ISO C2X C masa depan.
  • DI DALAM Dan mengimplementasikan fungsi dan makro untuk mencari bilangan floating point minimum dan maksimum dengan tipe float, long double, _FloatN dan _FloatNx, dijelaskan dalam spesifikasi IEEE 754-2019 dan ditambahkan ke rancangan standar ISO C2X C masa depan: fmaximum, fmaximum_num , fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • DI DALAM menambahkan konstanta untuk angka 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 rancangan standar ISO C2X.
  • Menambahkan penentu format "%b" dan "%B" ke rangkaian fungsi printf untuk mencetak bilangan bulat dalam representasi biner.
  • Sistem tautan dinamis menerapkan algoritme pengurutan DSO baru yang menggunakan penelusuran mendalam pertama (DFS) untuk mengatasi masalah kinerja saat menangani dependensi berulang. Untuk memilih algoritma pengurutan DSO, parameter glibc.rtld.dynamic_sort diusulkan, yang dapat diatur ke β€œ1” untuk memutar kembali ke algoritma lama.
  • ABI telah menambahkan dukungan untuk fungsi baru '__memcmpeq', yang digunakan oleh kompiler untuk mengoptimalkan penggunaan 'memcmp' jika nilai yang dikembalikan oleh fungsi ini hanya digunakan untuk memeriksa status penyelesaian suatu operasi.
  • Menambahkan dukungan untuk mendaftarkan thread secara otomatis menggunakan panggilan sistem rseq (restartable sequence) yang disediakan sejak kernel Linux 4.18. Panggilan sistem rseq memungkinkan Anda mengatur eksekusi berkelanjutan dari sekelompok instruksi tanpa terputus dan mengonfirmasi hasil instruksi terakhir dalam grup. Pada dasarnya, ini menyediakan sarana untuk eksekusi atom yang sangat cepat dari operasi yang, jika diinterupsi oleh thread lain, akan dibersihkan dan dicoba lagi.
  • Menambahkan symlink /usr/bin/ld.so.
  • Perakitan default dari semua file yang dapat dieksekusi dari program tertanam dan set pengujian dalam mode PIE (posisi independen yang dapat dieksekusi) disediakan. Untuk menonaktifkan perilaku ini, opsi β€œ--disable-default-pie” disediakan.
  • Untuk Linux, pengaturan glibc.malloc.hugetlb telah ditambahkan untuk memungkinkan implementasi malloc dialihkan untuk menggunakan panggilan sistem madvise dengan tanda MADV_HUGEPAGE untuk mmap dan sbrk, atau untuk langsung menggunakan halaman memori besar dengan menentukan tanda MAP_HUGETLB di mmap panggilan. Dalam kasus pertama, peningkatan kinerja dapat dicapai jika Halaman Besar Transparan digunakan dalam mode gila, dan dalam kasus kedua, kemampuan untuk menggunakan Halaman Besar yang dicadangkan sistem disediakan.
  • Menambahkan fungsi _dl_find_object yang dapat digunakan untuk menambahkan informasi pelepasan tumpukan panggilan.
  • Menambahkan dukungan untuk arsitektur OpenRISC (or1k-linux-gnu) dalam mode soft-float. Port ini memerlukan binutils 2.35, GCC 11, dan kernel Linux 5.4.
  • Menambahkan flag build "--with-rtld-early-cflags", yang dapat digunakan untuk menentukan flag kompilasi tambahan yang digunakan saat membuat kode awal untuk penautan dinamis.
  • Untuk platform Linux, fungsi epoll_pwait2 telah ditambahkan, yang berbeda dari epoll_wait dengan menentukan batas waktu dengan presisi nanodetik.
  • Menambahkan fungsi posix_spawn_file_actions_addtcsetpgrp_np untuk menghilangkan kondisi balapan saat menyetel terminal kontrol untuk proses baru.
  • Untuk aplikasi yang dikompilasi dengan Glibc dan GCC 12+, mode perlindungan β€œ_FORTIFY_SOURCE=3” diterapkan, yang mendeteksi kemungkinan buffer overflows saat menjalankan fungsi string yang ditentukan dalam file header string.h. Perbedaan dari mode β€œ_FORTIFY_SOURCE=2” terletak pada pemeriksaan tambahan, yang berpotensi menyebabkan penurunan kinerja.
  • Dukungan untuk Intel MPX (Memory Protection Extensions), yang digunakan untuk memeriksa penunjuk batasan memori, telah dihentikan (teknologi ini belum tersebar luas dan telah dihapus dari GCC dan LLVM).
  • Mekanisme prelink dan variabel lingkungan terkait LD_TRACE_PRELINKING dan LD_USE_LOAD_BIAS sudah tidak digunakan lagi dan akan dihapus pada rilis mendatang.

    Kerentanan diperbaiki:

    • CVE-2022-23218, CVE-2022-23219 – Buffer overflow pada fungsi svcunix_create dan clnt_create, disebabkan oleh penyalinan konten parameter nama file ke tumpukan tanpa memeriksa ukuran data yang disalin. Untuk aplikasi yang dibangun tanpa perlindungan tumpukan dan menggunakan protokol β€œunix”, kerentanan dapat menyebabkan eksekusi kode penyerang saat memproses nama file yang sangat panjang.
    • CVE-2021-3998 adalah kerentanan dalam fungsi realpath() karena pengembalian, dalam kondisi tertentu, nilai salah yang berisi data sisa yang tidak dibersihkan dari tumpukan. Untuk program Fusermount root SUID, kerentanan dapat digunakan untuk memperoleh informasi sensitif dari memori proses, misalnya untuk memperoleh informasi tentang pointer.
    • CVE-2021-3999 - Buffer overflow byte tunggal dalam fungsi getcwd(). Masalah tersebut disebabkan oleh bug yang sudah ada sejak tahun 1995. Untuk menyebabkan overflow, cukup panggil chdir() pada direktori "/" di namespace titik mount terpisah.

    Sumber: opennet.ru

Tambah komentar