Увидел свет релиз системной библиотеки GNU C Library (glibc) 2.17, которая полностью следует требованиям стандартов ISO C99, C11 и POSIX.1-2008. В подготовке нового выпуска использованы патчи от 96 разработчиков. Новая версия отличается поддержкой архитектуры AArch64 (ARM64), включением в состав пакета портов для дополнительных архитектур, функцией secure_getenv, прекращением поддержки ядер Linux старее 2.6.16, поддержкой режима FIPS в функции crypt, интеграцией функций "clock_*".
Glibc является основой большинства Linux-дистрибутивов, за исключением OpenWrt, Debian и Ubuntu, которые перешли на использование системной библиотеки Eglibc. Библиотека Eglibc построена на актуальной кодовой базе Glibc и полностью совместима с ней на уровне API и ABI, отличаясь интеграцией некоторых дополнительных наработок для встраиваемых систем, более низкими системными требованиями, возможностью гибкой настройки компонентов, улучшенной поддержкой кросс-компиляции и кросс-тестирования.
Из добавленных в Glibc 2.17 улучшений можно отметить:
- Добавлена реализованная консорциумом Linaro поддержка 64-разрядной архитектуры AArch64(ARM64), поддерживаемая в процессорах с набором команд ARMv8. Архитектура AArch64 включает в себя новый набор команд A64, примечательный расширением числа регистров, новыми командами для вычислений с плавающей запятой (FP) и новыми векторными SIMD-инструкциями NEON, такими как инструкции для ускорения работы алгоритмов шифрования AES и SHA-1/SHA-256. В настоящее время устройства на базе ARMv8 пока находятся на стадии тестирования прототипов, поступление в продажу первых ARMv8-систем ожидается в 2013 году;
- Коллекция портов Glibc для дополнительных платформ теперь поставляется в составе основного пакета, в поддиректории "ports";
- Добавлена новая функция secure_getenv, предоставляющая средства для безопасного доступа к переменным окружения (при запуске из процессов с установленным флагом SUID/SGID функция возвращает NULL). Функция secure_getenv создана в результате переименования ранее доступной внутренней функции __secure_getenv; * Минимально поддерживаемая версия ядра Linux установлена в 2.6.16;
- В функцию crypt добавлена проверка активности режима соответствия требованиям FIPS, проверяемом в Linux через /proc/sys/crypto/fips_enabled. Если режим активен, то crypt будет возвращать ошибку при задании несоответствующих спецификации значений salt, а также при попытке использования алгоритмов MD5 и DES;
- В базовый состав состав системной библиотеки интегрирован набор функций "clock_*", определённый в заголовочном файле time.h. Ранее, для включения данных функций требовалось использовать отдельную библиотеку (-lrt). Результатом такого шага стало то, что однопоточные программы использующие такие функции, как clock_gettime, и собираемые без опции "-lrt", теперь используют функций "clock_*" из Glibc, а не загружают их из библиотеки pthreads, что позволяет избежать ситуации подключения к однопоточным программам более ресурсоёмкого многопоточного кода в runtime-компонентах.
- Если недоступна ФС /proc при использовании функций ttyname и ttyname_r в Linux теперь поддерживается запасной вариант поиска tty-дескрипторов в /dev/pts и /dev, что позволяет создавать chroot-окружения без монтирования procfs;
- Общая оптимизация строковых функций strstr, strcasestr и memmem;
- Оптимизация строковых функций memchr, wcschr, wcscpy и wcsrchr для процессоров POWER7;
- Оптимизация функции memcpy для архитектуры MIPS;
- Добавлены варианты функций memcpy, memset и memcmp, оптимизированные для платформ System z10 и zEnterprise z196;
- Улучшена поддержка кросс-компиляции, включая средства для кросс-тестирования и сборок bootstrap, выполняемые без необходимости предварительной сборки glibc;
- Новые опции для сборочного скрипта configure: "--disable-nscd" для сборки варианта Glibc, не обращающегося к демону nscd (Name Service Caching Daemon) для разрешения имён; "--disable-build-nscd" для запрета сборки демона nscd;
- Новые опции для сборочного скрипта configure: "--with-bugurl" и "--with-pkgversion" для отражения в выводе "--help" и "--version" собственной информации о методах информирования об ошибках и версии пакета;
- В систему динамического связывания добавлена поддержка статических проверок, необходимых для трассировки приложений при помощи SystemTap;
- Для архитектур s390 и s390x добавлена поддержка задаваемого на этапе динамического связывания ELF-признака STT_GNU_IFUNC;
- Устранена уязвимость CVE-2011-4609 в реализации функции svc_run(), которая могла использоваться для осуществления DoS-атаки через создание высокой паразитной нагрузки на CPU;
- Исправлено 144 ошибки.