Випуск системної бібліотеки 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, не виключена поява проблем у додатках, в яких спостерігається перетин імен з раніше не використаними бібліотеками 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, pc, p_fqnname, p_option, p_query, p_rcode, p_time, p_type, putlong, putshort, res_hostalias, res_isourserver, res_nameinquery, res_queriesmatch, res_randomid, sym_ntop, sym_ntos, sym_ston) і <arpa/name kecanon, 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

Додати коментар або відгук