Представлен релиз системной библиотеки GNU C Library (glibc) 2.21, которая полностью следует требованиям стандартов ISO C11 и POSIX.1-2008. В подготовке нового выпуска использованы патчи от 61 разработчика.
Из добавленных в Glibc 2.21 улучшений можно отметить:
- Задействован новый алгоритм семафоров, реализованный с использованием единого для всех платформ кода на языке Си. Прошлая реализация была написана на ассемблере и испытывала проблемы с проверкой надёжности. Новая реализация поддерживает системы с 32- или 64-разрядными атомарными операциями и используется в функциях sem_init, sem_open, sem_post, sem_wait, sem_timedwait, sem_trywait и sem_getvalue;
- До GCC 4.6 повышены требования к минимальной версии компилятора, необходимого для сборки Glibc. Старые версии GCC и другие компиляторы по-прежнему могут использоваться для сборки программ, использующих Glibc;
- При сборке Glibc по умолчанию включен флаг "-Werror";
- Представлен порт Glibc для soft-процессоров Altera Nios II, подготовленный компанией Mentor Graphics;
- Включена оптимизированная для процессоров powerpc64/powerpc64le реализация функций strcpy, stpcpy, strncpy, stpncpy, strcmp и strncmp;
- Включена оптимизированная для процессоров AArch64 реализация функций strcpy, stpcpy, strchrnul и strrchr.
- Реализация функций memcpy для архитектуры i386 оптимизирована с использованием не требующих выравнивания SSE2-инструкций load/store;
- В реализации мьютексов pthread для процессоров powerpc32, powerpc64le и powerpc64 добавлена поддержка механизма Lock Elision, входящего в состав набора расширений TSX (Transactional Synchronization Extensions), что позволяет увеличить масштабируемость блокировок на системах с поддержкой инструкции HTM. Механизм по умолчанию отключен и требует сборки Glibc с опцией "--enable-lock-elision=yes";
- Удалена устаревшая функция sigvec, на смену которой в POSIX.1 пришёл интерфейс sigaction.
- Добавлена поддержка ABI-расширений MIPS o32 FPXX, FP64A и FP64;
- Устранены уязвимости:
- CVE-2015-1472 - может привести к переполнению буфера, о котором было известно с февраля прошлого года. Проблема проявляется из-за некорректного расчёта размера буфера, выделяемого для размещения разобранных аргументов функции wscanf;
- CVE-2014-7817 - игнорирование флага WRDE_NOCMD в функции wordexp может привести к запуску командной оболочки при обработке определённым образом оформленных входных данных;
- CVE-2012-3406 - переполнение стека при обработке в printf-подобных функциях слишком большого числа спецификаторов формата;
- CVE-2014-9402 - бесконечное зацикливание реализации nss_dns-функции getnetbyname при получении DNS-ответа, содержащего некорректные данные в поле PTR;
- Исправлено более 100 ошибок.