Выпуск сістэмнай бібліятэкі Glibc 2.35

Пасля шасці месяцаў распрацоўкі апублікаваны рэліз сістэмнай бібліятэкі GNU C Library (glibc) 2.35, якая цалкам прытрымліваецца патрабаванняў стандартаў ISO C11 і POSIX.1-2017. У склад новага выпуску ўключаны выпраўленні ад 66 распрацоўшчыкаў.

З рэалізаваных у Glibc 2.35 паляпшэнняў можна адзначыць:

  • Дададзена падтрымка лакалі «C.UTF-8», у якую ўваходзяць правілы сартавання для ўсіх Unicode-кодаў, але для эканоміі месца абмежаванай выкарыстаннем ASCII-дыяпазонаў у функцыях fnmatch, regexec і regcomp. Лакаль займае каля 400 КБ, з якіх 346 КБ складаюць дадзеныя LC_CTYPE для Unicode, і патрабуе асобнай усталёўкі (не ўбудаваная ў Glibc).
  • Дадзеныя кадовак, інфармацыя аб тыпах сімвалаў і табліцы транслітарацыі абноўлены для падтрымкі спецыфікацыі Unicode 14.0.0.
  • У і рэалізаваны функцыі і макрасы, якія акругляюць вынік да больш вузкага тыпу: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfmafNf, Функцыі апісаны ў спецыфікацыях TS 18661-1:2014, TS 18661-3:2015 і дададзены ў чарнавік будучага Сі-стандарту ISO C2X.
  • У і рэалізаваны функцыі і макрасы для знаходжання мінімуму і максімуму лікаў з якая плавае коскі з тыпамі float, long double, _FloatN і _FloatNx, апісаныя ў спецыфікацыі IEEE 754-2019 і дададзеныя ў чарнавік будучыні Сі-стандарту ISO C2X, fmaximum, fmaximum_num, fmaxim fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • У дададзены канстанты для лікаў з плаваючай коскай адзінарнай дакладнасці: 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_
  • Для функцый exp10 у загалоўкавых файлаў дададзены адпаведныя макра, не прывязаныя да канкрэтных тыпаў.
  • У дададзены макрас _PRINTF_NAN_LEN_MAX, прапанаваны ў чарнавіку стандарту ISO C2X.
  • У функцыі сямейства printf дададзеныя спецыфікатары фармату «%b» і «%B» для вываду цэлых лікаў у двайковым прадстаўленні.
  • У сістэме дынамічнага звязвання рэалізаваны новы алгарытм сартавання DSO, які выкарыстоўвае метад пошуку ў глыбіню (DFS) для вырашэння праблем з прадукцыйнасцю пры апрацоўцы зацыкленых залежнасцяў. Для выбару алгарытму сартавання DSO прапанаваны параметр glibc.rtld.dynamic_sort, якому можна прысвоіць значэнне "1" для адкату на стары алгарытм.
  • У ABI дададзена падтрымка новай функцыі '__memcmpeq', ужывальнай кампілятарамі для аптымізацыі выкарыстання 'memcmp', у выпадку калі якое вяртаецца дадзенай функцыяй значэнне выкарыстоўваецца толькі для праверкі статуту завяршэння аперацыі.
  • Дададзена падтрымка аўтаматычнай рэгістрацыі струменяў, выкарыстаючы сістэмны выклік rseq (restartable sequences), які прадстаўляецца пачынальна з ядра Linux 4.18. Сістэмны выклік rseq дазваляе арганізаваць непарыўнае выкананне групы інструкцый, якая не перарываецца і пацвярджае вынік апошняй інструкцыяй у групе. У сутнасці падаецца сродак для вельмі хуткага атамарнага выканання аперацый, якія ў выпадку перапынення іншым струменем чысцяцца і прадпрымаецца паўторная спроба выканання.
  • Дададзена сімвалічная спасылка /usr/bin/ld.so.
  • Забяспечана зборка па змаўчанні ўсіх выкананых файлаў убудаваных праграм і тэставага набору ў рэжыме PIE (position independent executable). Для адключэння гэтых паводзін прадугледжана опцыя "-disable-default-pie".
  • Для Linux дададзена налада glibc.malloc.hugetlb, якая дазваляе пераключыць рэалізацыю malloc на выкарыстанне сістэмнага выкліку madvise са сцягам MADV_HUGEPAGE для mmap і sbrk або напроста выкарыстоўваць вялікія старонкі памяці праз указанне сцяга MAP_HUGETLB у выкліках mmap. У першым выпадку можна дамагчыся павелічэнні прадукцыйнасці, калі Transparent Huge Pages выкарыстоўваюцца ў рэжыме madvise, а ў другім падаецца магчымасць выкарыстання зарэзерваваных сістэмай вялікіх старонак (Huge Pages).
  • Дададзена функцыя _dl_find_object, якую можна выкарыстоўваць для дадання інфармацыі аб раскрутцы стэка выклікаў (unwind).
  • Дададзена падтрымка архітэктуры OpenRISC (or1k-linux-gnu) у рэжыме праграмнай апрацоўкі аперацый з якая плавае коскі (soft-float). Для працы порта патрабуецца binutils 2.35, GCC 11, і ядро ​​Linux 5.4.
  • Дададзены зборачны сцяг "—with-rtld-early-cflags", пры дапамозе якога можна пазначыць дадатковыя сцягі кампіляцыі, якія выкарыстоўваюцца пры зборцы пачатковага кода для дынамічнага звязвання.
  • Для платформы Linux дададзена функцыя epoll_pwait2, адрозная ад epoll_wait указаннем таймаўту з нанасекунднай дакладнасцю.
  • Дададзена функцыя posix_spawn_file_actions_addtcsetpgrp_np, якая выключае станы гонкі пры ўсталёўцы кіраўніка тэрмінала для новага працэсу.
  • Для прыкладанняў, кампіляваных з Glibc і GCC 12+, рэалізаваны рэжым абароны «_FORTIFY_SOURCE=3», які выяўляе магчымыя перапаўненні буфера пры выкананні радковых функцый, вызначаных у загалоўкавым файле string.h. Адрозненне ад рэжыму "_FORTIFY_SOURCE=2" зводзіцца да дадатковых праверак, якія патэнцыйна могуць прыводзіць да зніжэння прадукцыйнасці.
  • Спыненая падтрымка пашырэнняў Intel MPX (Memory Protection Extensions), выкарыстоўваных для праверкі паказальнікаў на выкананне меж абласцей памяці (названая тэхналогія не атрымала распаўсюджвання і ўжо выдаленая з GCC і LLVM).
  • Абвешчаны састарэлым і будзе выдалены ў наступным выпуску механізм prelink і злучаныя з ім зменныя асяроддзі LD_TRACE_PRELINKING і LD_USE_LOAD_BIAS.

    Ухілены ўразлівасці:

    • CVE-2022-23218, CVE-2022-23219 - перапаўненне буфера ў функцыях svcunix_create і clnt_create, выкліканае капіяваннем у стэк змесціва параметру з імем файла без праверкі памеру капіяваных дадзеных. Для прыкладанняў, сабраных без абароны стэка і выкарыстоўвалых пратакол "unix", уразлівасць можа прывесці да арганізацыі выканання кода зламысніка пры апрацоўцы вельмі доўгіх імёнаў файлаў.
    • CVE-2021-3998 - уразлівасць у функцыі realpath(), выкліканая вяртаннем пры вызначаных умовах некарэктнага значэння, утрымоўвальнага неабчышчаныя рэшткавыя дадзеныя са стэка. Для SUID-root праграмы fusermount уразлівасць можна выкарыстоўваць для атрымання канфідэнцыйных звестак з памяці працэсу, напрыклад, для атрымання звестак аб паказальніках.
    • CVE-2021-3999 - аднабайтавае перапаўненне буфера ў функцыі getcwd(). Праблема выклікана памылкай, якая прысутнічае з 1995 года. Для выкліку перапаўнення дастаткова ў асобнай прасторы імёнаў кропак мантавання выканаць выклік chdir() для каталога «/».

    Крыніца: opennet.ru

Дадаць каментар