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

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

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

  • У асноўны склад libc інтэграваныя бібліятэкі libpthread, libdl, libutil і libanl, выкарыстанне функцыянальнасці якіх у прыкладаннях з гэтага часу не патрабуе злучэння пры дапамозе сцягоў -lpthread, -ldl, -lutil і -lanl. Праведзена падрыхтоўка да інтэграцыі libresolv у libc. Інтэграцыя дазволіць дамагчыся больш суцэльнага працэсу абнаўлення glibc і спросціць рэалізацыю runtime. Для забеспячэння зваротнай сумяшчальнасці з прыкладаннямі, сабранымі са старымі версіямі glibc, прадстаўлены бібліятэкі-заглушкі. З-за пашырэнні колькасці якія прадстаўляюцца ў glibc структур і функцый не выключана з'яўленне праблем у прыкладаннях, у якіх назіраецца скрыжаванне імёнаў c раней не скарыстанымі бібліятэкамі libpthread, libdl, libutil, libresolv і libanl.
  • Прадастаўлена магчымасць выкарыстання 64-разраднага тыпу time_t у канфігурацыях, у якіх традыцыйна выкарыстоўваўся 32-разрадны тып time_t. У падобных канфігурацыях, напрыклад, на сістэмах x86, па змаўчанні пакуль застаецца 32-разрадны time_t, але дадзеныя паводзіны зараз можна змяніць пры дапамозе макраса "_TIME_BITS". Магчымасць даступная толькі на сістэмах з ядром Linux прынамсі версіі 5.1.
  • Дададзена функцый _Fork, замена функцыі fork, якая адпавядае патрабаванням "async-signal-safe", г.зн. якая дапускае бяспечны выклік з апрацоўшчыкаў сігналаў. У працэсе выканання _Fork, фармуецца мінімальнае асяроддзе, дастатковае для выкліку функцый у апрацоўшчыках сігналаў, такіх як raise і execve, без задзейнічання магчымасцяў, якія могуць прывесці да змены блакіровак ці ўнутранага стану. Выклік _Fork будзе вызначаны ў будучай версіі стандарту POSIX, але пакуль уключаны ў лік пашырэнняў GNU.
  • Для платформы Linux рэалізавана функцыя execveat, якая дазваляе запусціць выкананы файл з адчыненага файлавага дэскрыптара. Новая функцыя таксама выкарыстоўваецца ў рэалізацыі выкліку fexecve які не патрабуе пры запуску наяўнасці прымантаванай псеўда-ФС /proc.
  • Дададзена функцыя timespec_getres, вызначаная ў чарнавіку стандарту ISO C2X і якая дапаўняе функцыю timespec_get магчымасцямі, падобнымі на POSIX-функцыю clock_getres.
  • Дададзена функцыя close_range(), якая дазваляе працэсу зараз зачыніць цэлы дыяпазон адчыненых файлавых дэскрыптараў. Функцыя даступная на сістэмах з ядром Linux, прынамсі версіі 5.9.
  • Дададзеныя функцыі closefrom і posix_spawn_file_actions_addclosefrom_np, якія дазваляюць зачыніць зараз усе файлавыя дэскрыптары, нумар якіх больш або роўны паказанаму значэнню.
  • У рэжымах "_DYNAMIC_STACK_SIZE_SOURCE" і "_GNU_SOURCE" значэнні PTHREAD_STACK_MIN, MINSIGSTKSZ і SIGSTKSZ зараз не з'яўляюцца канстантамі, што дазваляе забяспечыць падтрымку набораў рэгістраў дынамічнага памеру, напрыклад, якія прадстаўляюцца ў пашырэнні ARM SVE.
  • У кампаноўніку рэалізаваная опцыя "-list-diagnostics" для вываду інфармацыі, звязанай з аперацыямі вызначэння IFUNC (indirect function) і выбару падкаталога glibc-hwcaps.
  • Рэалізаваны макрас __STDC_WANT_IEC_60559_EXT__, прызначаны для праверкі наяўнасці функцый, вызначаных у дадатку "F" спецыфікацыі ISO C2X.
  • Для сістэм powerpc64 * рэалізавана опцыя "-disable-scv", якая дазваляе сабраць glibc без падтрымкі інструкцыі scv.
  • У файле gconv-modules пакінуты толькі мінімальны набор асноўных модуляў gconv, а астатнія перамешчаныя ў дадатковы файл gconv-modules-extra.conf, змешчаны ў каталогу gconv-modules.d.
  • Для платформы Linux рэалізаваны параметр glibc.pthread.stack_cache_size, які можа выкарыстоўвацца для налады памеру кэша стэка pthread.
  • Абвешчаная састарэлай функцыя inet_neta з загалоўкавых файлаў , а таксама розныя рэдка прымяняюцца функцыі з (dn_count_labels, fp_nquery, fp_query, fp_resstat, hostalias, loc_aton, loc_ntoa, p_cdname, p_cdnname, p_class, p_fqname, p_fqnname, p_option, p_query, p_rcode, p_r, _nameinquery, res_queriesmatch, res_randomid, sym_ntop , sym_ntos, sym_ston) і (ns_datetosecs, ns_format_ttl, ns_makecanon, ns_parse_ttl, ns_samedomain, ns_samename, ns_sprintrr, ns_sprintrrf, ns_subdomain). Замест гэтых функцый рэкамендуецца выкарыстоўваць асобныя бібліятэкі для працы з DNS.
  • Абвешчаныя састарэлымі функцыі pthread_mutex_consistent_np, thread_mutexattr_getrobust_np, pthread_mutexattr_setrobust_np і pthread_yield замест якіх варта выкарыстоўваць pthread_mutex_consistent, thread_mutexattr_getrobust, hread_mutexattr.
  • Спынена выкарыстанне сімвалічных спасылак для прывязкі усталёўваных падзяляных аб'ектаў да версіі Glibc. Падобныя аб'екты зараз усталёўваюцца як ёсць (напрыклад, libc.so.6 зараз з'яўляецца файлам, а не спасылкай на libc-2.34.so).
  • Па змаўчанні адключаныя адладкавыя магчымасці ў malloc, такія як MALLOC_CHECK_ (glibc.malloc.check), mtrace() і mcheck(), якія вынесены ў асобную бібліятэку libc_malloc_debug.so, у якую таксама перамешчаныя састарэлыя функцыі malloc_get_state.
  • У Linux для працы функцый, падобных shm_open і sem_open, зараз патрабуецца наяўнасць прылады /dev/shm.
  • Ухілены ўразлівасці:
    • CVE-2021-27645: крах працэсу nscd (nameserver caching daemon) з-за падвойнага выкліку функцыі free пры апрацоўцы спецыяльна аформленых netgroup-запытаў.
    • CVE-2021-33574: зварот да ўжо вызваленай вобласці памяці (use-after-free) у функцыі mq_notify пры выкарыстанні тыпу апавяшчэнняў SIGEV_THREAD з атрыбутам струменя, для якога выстаўленая альтэрнатыўная маска прывязкі да CPU. Праблема можа прывесці да краху, але не выключаюцца і іншыя варыянты нападаў.
    • CVE-2021-35942: перапаўненне памеру параметра ў функцыі wordexp можа прывесці да краху прыкладання.

Крыніца: opennet.ru

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