Выпуск системной библиотеки 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 из заголовочного файла <arpa/inet.h>, а также различные редко применяемые функции из <resolv.h> (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_time, p_type, putlong, putshort, res_hostalias, res_isourserver, res_nameinquery, res_queriesmatch, res_randomid, sym_ntop, sym_ntos, sym_ston) и <arpa/nameser.h> (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_setrobust и sched_yield.
  • Прекращено использование символических ссылок для привязки устанавливаемых разделяемых объектов к версии Glibc. Подобные объекты теперь устанавливаются как есть (например, libc.so.6 теперь является файлом, а не ссылкой на libc-2.34.so).
  • По умолчанию отключены отладочные возможности в malloc, такие как MALLOC_CHECK_ (glibc.malloc.check), mtrace() и mcheck(), которые вынесены в отдельную библиотеку libc_malloc_debug.so, в которую также перемещены устаревшие функции malloc_get_state и malloc_set_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

Добавить комментарий