Релиз системной библиотеки Glibc 2.25
5 февраля 2017 года
После шести месяцев разработки состоялся релиз системной библиотеки GNU C Library (glibc) 2.25, которая полностью следует требованиям стандартов ISO C11 и POSIX.1-2008. В состав нового выпуска включены исправления от 51 разработчика.
Из добавленных в Glibc 2.25 улучшений можно отметить:
- Большая часть glibc теперь может быть собрана в режиме защиты стека от переполнения. Сборка с опцией "--enable-stack-
protector=strong" переведена в разряд рекомендованных;
- В состав включены функции getentropy и getrandom, а также связанный с ними заголовочный файл sys/random.h. Getentropy и getrandom предложены проектом OpenBSD и предоставляют возможность получения значений от системного генератора псевдослучайных чисел через обращение к системному вызову, что обеспечивает надёжную защиту от атак, основанных на исчерпании доступных файловых дескрипторов (при отсутствии свободных дескрипторов невозможно задействовать /dev/urandom);
- Из OpenBSD перенесена функция explicit_bzero, предлагаемая как аналог memset() для очистки буферов, содержащих важные данные. Смысл использования explicit_bzero в исключении ситуаций, когда оптимизатор компилятора может посчитать вызов memset излишним и удалить его, что приведёт к оставлению в памяти важных данных, подлежащих очистке;
- В libc добавлены функции преобразования в строковое представление чисел с плавающей запятой (strfromd, strfromf и strfroml), определённые в стандарте ISO/IEC TS 18661-1:2014;
- В заголовочный файл math.h добавлена большая порция новых возможностей, определённых в стандарте TS 18661-1:2014:
- Макросы, указывающие о присвоении значения NaN: SNANF, SNAN, SNANL;
- Функции для округления целых чисел: roundeven, roundevenf, roundevenl,
fromfp, fromfpf, fromfpl, ufromfp, ufromfpf, ufromfpl, fromfpx, fromfpxf, fromfpxl, ufromfpx, ufromfpxf, ufromfpxl;
- Функции вычисления логарифмов llogb, llogbf и llogbl, и связанные с ними макросы FP_LLOGB0 и FP_LLOGBNAN;
- Функции определения максимальных и минимальных значений: fmaxmag, fmaxmagf, fmaxmagl, fminmag,
fminmagf, fminmagl;
- Макрос для сравнения: iseqsig;
- Макросы проверки значений: iscanonical, issubnormal, iszero;
- Функции для работы с упорядоченными множествами: totalorder, totalorderf, totalorderl,
totalordermag, totalordermagf, totalordermagl;
- Функции приведения к канонической форме: canonicalize, canonicalizef, canonicalizel;
- Функции для обработки значений NaN: getpayload, getpayloadf, getpayloadl, setpayload,
setpayloadf, setpayloadl, setpayloadsig, setpayloadsigf, setpayloadsigl.
- Добавлена поддержка тестовых макросов __STDC_WANT_LIB_EXT2__,
__STDC_WANT_IEC_60559_BFP_EXT__ и __STDC_WANT_IEC_60559_FUNCS_EXT__, позволяющих включить определения c наборами функций, предложенных в спецификациях ISO/IEC TR 24731-2:2010, ISO/IEC TS 18661-1:2014 и ISO/IEC TS 18661-4:2015. Тестовый характер макросов обусловлен тем, что не все функции из указанных спецификаций пока реализованы;
- Нестандартные макросы выбора режимов работы _REENTRANT и _THREAD_SAFE для обеспечения совместимости теперь обрабатываются как синонимы вызова "_POSIX_C_SOURCE=199506L". Изменение поведения отразится только на программах, собранных в режимах совместимости со старыми стандартами. Например, видимые объявления изменятся при сборке с опциями "-std=c89 -D_REENTRANT", но останутся прежними при сборке с опциями "-D_REENTRANT" или "-std=c99
-D_POSIX_C_SOURCE=200809L -D_REENTRANT";
- Объявлено устаревшим включение заголовочного файла sys/sysmacros.h из sys/types.h, который в свою очередь вызывается из stdlib.h при работе в режиме _GNU_SOURCE. В будущих выпусках макросы
"major", "minor" и "makedev" будут доступны только при явном подключении sys/sysmacros.h. Данные макросы не определены в спецификациях POSIX и XSI, поэтому бывает, что их имена конфликтуют с кодом приложений;
- Добавлен новый заголовочный файл fenv.h, определённый в спецификации TS 18661-1:2014. Через fenv.h импортируются присутствующие в libm функции fesetexcept, fetestexceptflag, fegetmode и fesetmode, тип femode_t, а также макросы FE_DFL_MODE и FE_SNANS_ALWAYS_SIGNAL;
- В заголовочный файл limits.h добавлен набор макросов, определённых в стандарте TS 18661-1:2014:
CHAR_WIDTH, SCHAR_WIDTH, UCHAR_WIDTH, SHRT_WIDTH, USHRT_WIDTH, INT_WIDTH, UINT_WIDTH, LONG_WIDTH, ULONG_WIDTH, LLONG_WIDTH, ULLONG_WIDTH;
- В заголовочный файл stdint.h добавлен набор макросов, определённых в стандарте TS 18661-1:2014: INT8_WIDTH, UINT8_WIDTH,
INT16_WIDTH, UINT16_WIDTH, INT32_WIDTH, UINT32_WIDTH, INT64_WIDTH, UINT64_WIDTH, INT_LEAST8_WIDTH, UINT_LEAST8_WIDTH, INT_LEAST16_WIDTH, UINT_LEAST16_WIDTH, INT_LEAST32_WIDTH, UINT_LEAST32_WIDTH, INT_LEAST64_WIDTH, UINT_LEAST64_WIDTH, INT_FAST8_WIDTH, UINT_FAST8_WIDTH, INT_FAST16_WIDTH, UINT_FAST16_WIDTH, INT_FAST32_WIDTH, UINT_FAST32_WIDTH, INT_FAST64_WIDTH, UINT_FAST64_WIDTH, INTPTR_WIDTH, UINTPTR_WIDTH, INTMAX_WIDTH, UINTMAX_WIDTH, PTRDIFF_WIDTH, SIG_ATOMIC_WIDTH, SIZE_WIDTH, WCHAR_WIDTH, WINT_WIDTH;
- На платформах ColdFire, MicroBlaze, Nios II и SH3 тип float_t теперь определяется как float вместо double;
- На платформе x86_64 при сборке в режиме "-mfpmath=387" или "-mfpmath=sse+387" (не применяются по умолчанию) типы float_t и double_t теперь определяются как "long double" вместо float и double. Данное изменение не влияет на ABI библиотек из состава Glibc, но влияет на ABI других библиотек, собранных с отмеченными опциями;
- Размер буфера байтовых потоков stdio теперь по умолчанию ограничен 8192 байтами (ранее применялось значение в 4096 байт);
- В заголовочном файле sys/quota.h обеспечено включение файла linux/quota.h. Поддержка устаревшего интерфейса квот Linux, которая использовалась в ядрах до 2.4.22, удалена;
- Удалены функции malloc_get_state и malloc_set_state, но для уже динамически связанных исполняемых файлов оставлены скрытые заглушки. Из существующих проектов данные функции используются только в GNU Emacs, работоспособность сборок которого, благодаря реализованным заглушкам, не нарушится;
- Из resolv.h удалены опции "ip6-dotint", "no-ip6-dotint" и "ip6-bytestring", завязанные на неиспользуемые в сети расширения. Объявлены устаревшими флаги RES_USE_INET6, RES_AAONLY, RES_PRIMARY, RES_NOCHECKNAME, RES_KEEPTSIG и RES_BLAST, а также опция "inet6" в /etc/resolv.conf;
- Из arpa/nameser.h удалены все объявления, связанные с DNSSEC. Библиотека libresol больше не пытается самостоятельно декодировать записи DNSSEC. Из arpa/nameser.h также удалены макросы ns_t_qt_p, ns_t_mrr_p, ns_t_rr_p, ns_t_udp_p и ns_t_xfr_p;
- Для поддержки multi-arch для сборки Glibc рекомендовано использовать GCC с поддержкой режима косвенного вызова функций ('--enable-gnu-indirect-function');
- В POSIX Threads для мьютексов и условных переменных структур добавлены обработчики наглядного вывода для GDB через команды 'print' и 'display';
- Добавлена возможность тонкой настройки runtime-компонентов для определённых приложений ('--enable-tunables');
- Реализован новый вариант функции pthread_rwlock, основанный на более масштабируемом алгоритме, не использущем критические секции для изменения состояния;
- Устранены две уязвимости:
Источники[править]
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии[править]
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.