Glibc 2.35 tizim kutubxonasi relizi

Olti oylik rivojlanishdan so'ng ISO C2.35 va POSIX.11-1 standartlari talablariga to'liq javob beradigan GNU C Library (glibc) 2017 tizim kutubxonasi chiqarildi. Yangi versiya 66 ta ishlab chiquvchi tomonidan tuzatilgan.

Glibc 2.35 da amalga oshirilgan ba'zi yaxshilanishlarga quyidagilar kiradi:

  • Barcha Unicode kodlari uchun solishtirish qoidalarini o'z ichiga olgan "C.UTF-8" lokali uchun qo'shimcha qo'llab-quvvatlash, lekin bo'sh joyni tejash fnmatch, regexec va regcomp funksiyalarida ASCII diapazonlaridan foydalanish bilan cheklangan. Mahalliy til taxminan 400 KB, shundan 346 KB Unicode uchun LC_CTYPE maʼlumotlaridir va alohida oʻrnatishni talab qiladi (Glibc ichiga oʻrnatilmagan).
  • Unicode 14.0.0 spetsifikatsiyasini qo'llab-quvvatlash uchun kodlash ma'lumotlari, belgilar turi ma'lumotlari va transliteratsiya jadvallari yangilandi.
  • IN Va Natijani torroq turga yaxlitlovchi funksiyalar va makroslar amalga oshiriladi: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfNfMfNx, fMfmafx va fMfmaf. Funktsiyalar TS 18661-1:2014, TS 18661-3:2015 spetsifikatsiyalarida tasvirlangan va kelajakdagi ISO C2X C standarti loyihasiga qo'shilgan.
  • IN Va IEEE 754-2019 spetsifikatsiyasida tavsiflangan va kelajakdagi ISO C2X C standarti loyihasiga qo'shilgan float, long double, _FloatN va _FloatNx turlari bilan suzuvchi nuqta raqamlarining minimal va maksimalini topish uchun funksiyalar va makroslarni amalga oshirdi: fmaximum, fmaximum_num , fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • IN Yagona aniqlikdagi suzuvchi nuqta raqamlari uchun qoʻshilgan konstantalar: 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_2_SQRTPIf, M_SSQRTS1 va M_SQRTS2.
  • Sarlavha faylidagi exp10 funktsiyalari uchun Muayyan turlarga bog'lanmagan mos keladigan makroslar qo'shildi.
  • IN ISO C2X standarti loyihasida taklif qilingan _PRINTF_NAN_LEN_MAX makrosini qo'shdi.
  • Butun sonlarni ikkilik koʻrinishda chop etish uchun printf funksiyalar oilasiga “%b” va “%B” format spetsifikatsiyalari qoʻshildi.
  • Dinamik bog'lanish tizimi yangi DSO saralash algoritmini amalga oshiradi, bunda birinchi navbatda chuqur qidiruv (DFS) dan bog'liqliklarni hal qilishda ishlash muammolarini hal qiladi. DSO tartiblash algoritmini tanlash uchun glibc.rtld.dynamic_sort parametri taklif qilinadi, uni eski algoritmga qaytish uchun “1” ga o‘rnatish mumkin.
  • ABI yangi "__memcmpeq" funktsiyasini qo'llab-quvvatladi, agar ushbu funktsiya tomonidan qaytarilgan qiymat faqat operatsiyaning yakunlanishi holatini tekshirish uchun ishlatilsa, "memcmp" dan foydalanishni optimallashtirish uchun kompilyatorlar tomonidan foydalaniladi.
  • Linux yadrosi 4.18.dan beri taqdim etilgan rseq (qayta ishga tushiriladigan ketma-ketliklar) tizimi qo'ng'iroqlari yordamida iplarni avtomatik ravishda ro'yxatdan o'tkazish uchun qo'shimcha yordam. Rseq tizim chaqiruvi uzilmagan va guruhdagi oxirgi ko'rsatma bilan natijani tasdiqlovchi ko'rsatmalar guruhining uzluksiz bajarilishini tashkil qilish imkonini beradi. Asosan, u boshqa ish zarrachalari bilan uzilib qolganda tozalab, qaytadan urinib ko'radigan operatsiyalarni juda tez atomik bajarish uchun vositani taqdim etadi.
  • Symlink /usr/bin/ld.so qo'shildi.
  • O'rnatilgan dasturlarning barcha bajariladigan fayllarini standart yig'ish va PIE (pozitsiyadan mustaqil bajariladigan) rejimida test to'plami taqdim etiladi. Ushbu xatti-harakatni o'chirish uchun "--disable-default-pie" opsiyasi taqdim etiladi.
  • Linux uchun glibc.malloc.hugetlb sozlamasi malloc ilovasini mmap va sbrk uchun MADV_HUGEPAGE bayrog'i bilan madvise tizimi chaqiruvidan foydalanishga yoki mmapda MAP_HUGETLB bayrog'ini belgilash orqali to'g'ridan-to'g'ri katta xotira sahifalaridan foydalanishga ruxsat berish uchun qo'shilgan. qo'ng'iroqlar. Birinchi holda, Transparent Huge Pages madvise rejimida ishlatilsa, unumdorlikka erishish mumkin, ikkinchi holatda esa tizim tomonidan saqlangan Huge Pagesdan foydalanish imkoniyati taqdim etiladi.
  • _dl_find_object funksiyasi qo'shildi, undan qo'ng'iroqlar to'plamini ochish ma'lumotlarini qo'shish uchun foydalanish mumkin.
  • Yumshoq float rejimida OpenRISC arxitekturasini (or1k-linux-gnu) qo'llab-quvvatlash qo'shildi. Port uchun binutils 2.35, GCC 11 va Linux yadrosi 5.4 talab qilinadi.
  • "--with-rtld-early-cflags" yaratish bayrog'i qo'shildi, undan dinamik ulanish uchun dastlabki kodni yaratishda foydalaniladigan qo'shimcha kompilyatsiya bayroqlarini belgilash uchun foydalanish mumkin.
  • Linux platformasi uchun epoll_pwait2 funksiyasi qo'shildi, u epoll_wait-dan nanosekundlik aniqlik bilan kutish vaqtini belgilash bilan farq qiladi.
  • Yangi jarayon uchun boshqaruv terminalini o'rnatishda poyga shartlarini bartaraf etish uchun qo'shilgan posix_spawn_file_actions_addtcsetpgrp_np funksiyasi.
  • Glibc va GCC 12+ bilan kompilyatsiya qilingan ilovalar uchun “_FORTIFY_SOURCE=3” himoya rejimi joriy etilgan bo‘lib, u string.h sarlavha faylida belgilangan string funksiyalarini bajarishda mumkin bo‘lgan bufer toshib ketishini aniqlaydi. “_FORTIFY_SOURCE=2” rejimidan farq qo‘shimcha tekshiruvlarga to‘g‘ri keladi, bu esa unumdorlikning pasayishiga olib kelishi mumkin.
  • Ko'rsatkichlarni xotira chegaralarini tekshirish uchun foydalaniladigan Intel MPX (Xotirani himoya qilish kengaytmalari) ni qo'llab-quvvatlash to'xtatildi (bu texnologiya keng tarqalmagan va allaqachon GCC va LLVM dan olib tashlangan).
  • Oldindan bog‘lanish mexanizmi va unga aloqador muhit o‘zgaruvchilari LD_TRACE_PRELINKING va LD_USE_LOAD_BIAS eskirgan va kelgusi versiyada o‘chirib tashlanadi.

    Zaifliklar tuzatildi:

    • CVE-2022-23218, CVE-2022-23219 – svcunix_create va clnt_create funksiyalarida bufer to‘lib ketishi, fayl nomi parametrining mazmunini nusxa olingan ma’lumotlar hajmini tekshirmasdan stekga nusxalash natijasida yuzaga keladi. Stekdan himoyalanmagan va "unix" protokolidan foydalangan holda yaratilgan ilovalar uchun zaiflik juda uzun fayl nomlarini qayta ishlashda tajovuzkor kodining bajarilishiga olib kelishi mumkin.
    • CVE-2021-3998 - realpath() funksiyasidagi zaiflik, ma'lum sharoitlarda stekdan tozalanmagan qoldiq ma'lumotlarni o'z ichiga olgan noto'g'ri qiymat qaytarilishi bilan bog'liq. SUID-root fusermount dasturi uchun zaiflikdan jarayon xotirasidan nozik ma'lumotlarni olish, masalan, ko'rsatkichlar haqida ma'lumot olish uchun foydalanish mumkin.
    • CVE-2021-3999 - getcwd() funksiyasida bir baytli bufer to'lib ketishi. Muammo 1995 yildan beri mavjud bo'lgan xato tufayli yuzaga keladi. To'ldirilishi uchun alohida o'rnatish nuqtasi nom maydonidagi "/" katalogidagi chdir() ni chaqirish kifoya.

    Manba: opennet.ru

a Izoh qo'shish