Выпуск системной библиотеки Glibc 2.34

2 августа 2021 года

После шести месяцев разработки опубликован релиз системной библиотеки 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.
  • Устранены уязвимости:

Источники

править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Выпуск системной библиотеки Glibc 2.34», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.