Rilis Perpustakaan Sistem Glibc 2.31

Setelah enam bulan pengembangan diterbitkan rilis perpustakaan sistem Perpustakaan GNU C (glibc) 2.31, yang sepenuhnya mematuhi persyaratan standar ISO C11 dan POSIX.1-2008. Rilis baru ini mencakup perbaikan dari 58 pengembang.

Dari yang diimplementasikan di Glibc 2.31 perbaikan Anda dapat mencatat:

  • Menambahkan makro _ISOC2X_SOURCE untuk mengaktifkan kemampuan yang ditentukan dalam draf standar ISO masa depan C2X. Fitur-fitur ini juga diaktifkan saat menggunakan makro _GNU_SOURCE atau saat membangun di gcc dengan flag β€œ-std=gnu2x”;
  • Untuk fungsi yang ditentukan dalam file header "math.h" yang membulatkan hasilnya ke tipe yang lebih kecil, makro tipe generik yang sesuai diusulkan dalam file "tgmath.h", seperti yang disyaratkan oleh spesifikasi TS 18661-1:2014 dan TS 18661-3: 2015;
  • Menambahkan fungsi pthread_clockjoin_np(), yang menunggu thread selesai, dengan mempertimbangkan batas waktu (jika batas waktu terjadi sebelum selesai, fungsi akan mengembalikan kesalahan). Berbeda dengan pthread_timedjoin_np(), di pthread_clockjoin_np() dimungkinkan untuk menentukan jenis pengatur waktu untuk menghitung batas waktu - CLOCK_MONOTONIC (memperhitungkan waktu yang dihabiskan oleh sistem dalam mode tidur) atau CLOCK_REALTIME;
  • Resolver DNS sekarang mendukung opsi trust-ad di /etc/resolv.conf dan flag RES_TRUSTAD di _res.options, jika disetel, flag DNSSEC dikirimkan dalam permintaan DNS AD (data yang diautentikasi). Dalam mode ini, flag AD yang disetel oleh server akan tersedia untuk aplikasi yang memanggil fungsi seperti res_search(). Secara default, jika opsi yang disarankan tidak disetel, glibc tidak menentukan tanda AD dalam permintaan dan secara otomatis menghapusnya dalam tanggapan, yang menunjukkan bahwa pemeriksaan DNSSEC tidak ada;
  • Membangun pengikatan panggilan sistem yang berfungsi untuk Glibc tidak lagi memerlukan instalasi file header kernel Linux. Pengecualian adalah arsitektur RISC-V 64-bit;
  • Dieliminasi kerentanan CVE-2019-19126, yang memungkinkan Anda melewati perlindungan
    ASLR dalam program dengan flag setuid dan menentukan tata letak alamat di perpustakaan yang dimuat melalui manipulasi variabel lingkungan LD_PREFER_MAP_32BIT_EXEC.

Perubahan yang merusak kompatibilitas:

  • totalorder(), totalordermag(), dan fungsi serupa untuk tipe floating-point lainnya kini menerima pointer sebagai argumen untuk menghilangkan peringatan tentang konversi nilai dalam keadaan Tidak, sesuai dengan rekomendasi TS 18661-1 yang diusulkan untuk standar C2X masa depan.
    Executable yang ada yang meneruskan argumen floating point secara langsung akan terus berjalan tanpa modifikasi;

  • Fungsi stime yang sudah lama tidak digunakan lagi tidak lagi tersedia untuk biner tertaut glibc, dan definisinya telah dihapus dari time.h. Untuk mengatur waktu sistem, gunakan fungsi clock_settime. Di masa depan, kami berencana untuk menghapus fungsi ftime yang tidak digunakan lagi, serta file header sys/timeb.h (gettimeofday atau clock_gettime harus digunakan sebagai pengganti ftime);
  • Fungsi gettimeofday tidak lagi meneruskan informasi tentang zona waktu seluruh sistem (fitur ini relevan pada zaman 4.2-BSD dan sudah tidak digunakan lagi selama bertahun-tahun). Argumen 'tzp' sekarang harus melewati penunjuk nol, dan fungsi localtime() harus digunakan untuk mendapatkan informasi zona waktu berdasarkan waktu saat ini. Memanggil gettimeofday dengan argumen 'tzp' bukan nol akan mengembalikan kolom tz_minitswest dan tz_dsttime yang kosong dalam struktur zona waktu. Fungsi gettimeofday itu sendiri tidak digunakan lagi di POSIX (disarankan clock_gettime daripada gettimeofday), tetapi tidak ada rencana untuk menghapusnya dari glibc;
  • settimeofday tidak lagi mendukung penerusan parameter secara bersamaan untuk mengatur waktu dan offset koreksi waktu. Saat memanggil settimeofday, salah satu argumen (waktu atau offset) sekarang harus disetel ke nol, jika tidak, pemanggilan fungsi akan gagal dengan kesalahan EINVAL. Seperti gettimeofday, fungsi settimeofday tidak digunakan lagi di POSIX dan direkomendasikan untuk diganti dengan fungsi clock_settime atau rangkaian fungsi adjtime;
  • Dukungan untuk arsitektur SPARC ISA v7 telah dihentikan (dukungan v8 dipertahankan untuk saat ini, namun hanya untuk prosesor yang mendukung instruksi CAS, seperti prosesor LEON, bukan prosesor SuperSPARC).
  • Jika penyandingan gagal di "malas", di mana linker tidak mencari simbol suatu fungsi hingga panggilan pertama ke fungsi tersebut, fungsi dlopen sekarang memaksa proses untuk dihentikan (sebelumnya mengembalikan NULL jika gagal);
  • Untuk ABI hard-float MIPS, tumpukan yang dapat dieksekusi sekarang digunakan, kecuali build secara eksplisit membatasi penggunaan kernel Linux 4.8+ melalui parameter β€œ-enable-kernel=4.8.0” (dengan kernel hingga 4.8, crash sering terjadi diamati untuk beberapa konfigurasi MIPS);
  • Pengikatan di sekitar panggilan sistem yang terkait dengan manipulasi waktu telah dipindahkan untuk menggunakan panggilan sistem time64, jika ada (pada sistem 32-bit, glibc terlebih dahulu mencoba panggilan sistem baru yang memanipulasi jenis waktu 64-bit, dan jika tidak ada, gagal kembali ke panggilan 32-bit yang lama).

Sumber: opennet.ru

Tambah komentar