Выпуск системной библиотеки Glibc 2.26
После шести месяцев разработки состоялся релиз системной библиотеки GNU C Library (glibc) 2.26, которая полностью следует требованиям стандартов ISO C11 и POSIX.1–2008. В состав нового выпуска включены исправления от 66 разработчиков.
Из добавленных в Glibc 2.26 улучшений можно отметить:
- В функции malloc реализована поддержка кэша, индивидуального для каждого потока, что позволило избавиться от блокировок, возникающих при использовании общего для всех потоков кэша, и существенно поднять производительность при выделении и освобождении небольших блоков памяти;
- Расширены возможности встроенного DNS-резолвера: реализовано определение изменения содержимого файла /etc/resolv.conf для оперативной загрузки изменённой конфигурации (для запрета автообновления предусмотрена опция «no-reload»); обеспечена возможность указания произвольного числа элементов в списке «domain search» в /etc/resolv.conf (ранее можно было указать не больше шести доменов); при указании опции «rotate» в glibc теперь случайным образом выбирается сервер имён, который будет использован первым (ранее первым всегда использовался сервер, указанным вторым в списке);
- По умолчанию включены средства тонкой настройки runtime-компонентов, которые позволяют изменять поведение Glibc при помощи переменной окружения GLIBC_TUNABLES;
- Добавлена функция reallocarray, позволяющая выделить память для нескольких отличающихся по размеру объектов без дополнительных затрат на очистку памяти, но с сохранением средств борьбы с целочисленными переполнениями;
- Добавлены функции-обвязки для новых системных вызовов Linux — preadv2() и pwritev2(), которые отличаются от preadv () и pwritev () наличием ещё одного аргумента для передачи ядру дополнительных флагов. В настоящее время при наличии ядра Linux 4.7+ поддерживаются флаги RWF_SYNC (сброс данных и метаданных из кэша на носитель после выполнения операции) и RWF_DSYNC (принудительный сброс на носитель только данных);
- В posix_spawnattr_setflags добавлена поддержка флага POSIX_SPAWN_SETSID, используемого для создания нового идентификатора сеанса session ID для порождённого процесса. Данный флаг намечен для включения в следующей версии стандарта POSIX, поэтому пока поставляется в составе расширений »_GNU_SOURCE»;
- Заголовочный файл errno.h теперь безопасно использовать из блоков на языке ассемблера, прошедших обработку в Си-препроцессоре;
- В библиотеку math для архитектур ia64, powerpc64le, x86–32 и x86–64 добавлена поддержка 128-разрядных операций с плавающей запятой, определённых в стандартах ISO/IEC/IEEE 60559:2011 (IEEE 754–2008) и ISO/IEC TS 18661–3:2015. Для задействования данной возможности в программах компилятор должен поддерживать тип _Float12 или __float128. Функциональность доступна при включении набора _GNU_SOURCE или __STDC_WANT_IEC_60559_TYPES_EXT__;
- Возможности, связанные с кодировками, информацией о типах символов и таблицами транслитерации, приведены в соответствие со спецификацией Unicode 10.0.0;
- Удалён порт для Native Client с архитектурой ARMv7-A;
- Объявлены устаревшими и отключены по умолчанию (для включения требуется сборка с »--enable-obsolete-rpc») компоненты Sun RPC, включая rpcgen, librpcsvc и заголовочные файлы Sun RPC. Также объявлены устаревшими модули NIS/NIS+, а также библиотеки libnss_nis, libnss_nisplus, libnss_compat и libnsl. В качестве замены рекомендуется использовать TIRPC, в котором имеется поддержка IPv6;
- Из заголовочного файла string.h исключены inline-версии строковых функций, а макросы __USE_STRING_INLINES и __NO_STRING_INLINES большие ни на что не влияют;
- Удалён нестандартный заголовочный файл xlocale.h, вместо которого следует использовать locale.h. Также удалён устаревший файл sys/ultrasound.h;
- Удалена поддержка устаревшей функции cfree () вместо которой следует использовать free ();
- Для работы теперь требуется ядро Linux 3.2 или более новый выпуск. Для сборки Glibc необходимо наличие GNU Binutils 2.25+ и GCC 4.9+ (ограничение не распространяется на сборку приложений, использующих Glibc, только на сборку самого Glibc);
- Устранены уязвимости:
- CVE-2017–1000366 — локальное повышение привилегий через манипуляцию с содержимым переменной окружения LD_LIBRARY_PATH при вызове suid-приложений. На базе данной уязвимости была построена серия эксплоитов для локального получения прав root в рамках атаки Stack Сlash;
- CVE-2017–12132 — DNS-резолвер подвержен спуфинг-атакам, манипулирующим фрагментацией пакетов большого размера;
- CVE-2010–3192 — утечка информации через повреждение стека при вызове функции __stack_chk_fail;
- CVE-2017–12133 — обращение к буферу после его освобождения (use-after-free) в коде clntudp_call из состава Sun RPC.
© OpenNet