После шести месяцев разработки состоялся релиз системной библиотеки GNU C Library (glibc) 2.26, которая полностью следует требованиям стандартов ISO C11 и POSIX.1-2008. В состав нового выпуска включены исправления от 66 разработчиков.

Из добавленных в Glibc 2.26 улучшений можно отметить:

  • В функции malloc реализована поддержка кэша, индивидуального для каждого потока, что позволило избавиться от блокировок, возникающих при использовании общего для всех потоков кэша, и существенно поднять производительность при выделении и освобождении небольших блоков памяти;
  • В библиотеку 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__;
  • Объявлены устаревшими и отключены по умолчанию (для включения требуется сборка с "--enable-obsolete-rpc") компоненты Sun RPC, включая rpcgen, librpcsvc и заголовочные файлы Sun RPC. Также объявлены устаревшими модули NIS/NIS+, а также библиотеки libnss_nis, libnss_nisplus, libnss_compat и libnsl. В качестве замены рекомендуется использовать TIRPC, в котором имеется поддержка IPv6, или rpcsvc-proto;
  • Расширены возможности встроенного 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 теперь безопасно использовать из блоков на языке ассемблера, прошедших обработку в Си-препроцессоре;
  • Возможности, связанные с кодировками, информацией о типах символов и таблицами транслитерации, приведены в соответствие со спецификацией Unicode 10.0.0;
  • Удалён порт для Native Client с архитектурой ARMv7-A;
  • Из заголовочного файла 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.


Источник: http://www.opennet.ru/opennews/art.shtml?num=46959