Состоялся релиз системной библиотеки Glibc 2.22
После недели тестирования финальных сборок официально состоялся релиз системной библиотеки GNU C Library (glibc) 2.22, которая полностью следует требованиям стандартов ISO C11 и POSIX.1–2008. В подготовке нового выпуска использованы патчи от 64 разработчиков.
Из добавленных в Glibc 2.22 улучшений можно отметить:
- В состав включена библиотека векторных математических функций libmvec, позволяющая задействовать в приложениях векторизированные реализации типовых математических функций, в которых используются SIMD-расширения. Для архитектуры x86_64 в библиотеке представлены следующие функции: cos, cosf, sin, sinf, sincos, sincosf, log, logf, exp, expf, pow и powf, оптимизированные при помощи инструкций SSE и AVX.
Для использования векторизированных функций при обращении к GCC следует указать флаги »-fopenmp -ffast-math» (поддерживаются выпуски GCC, начиная с 4.9.0 в режимах оптимизации, начиная с »-O1»). Связывание исполняемого файла с libmvec.so производится автоматически при указании »-lm» (нет необходимости явно указывать »-lmvec»). При желании сборку libmvec в составе Glibc можно отключить при помощи опции »--disable-mathvec»
- Новая реализация функции fmemopen, отличающаяся более строгим следованием рекомендациям POSIX. В частности, в новой реализации fmemopen решены с давних пор остававшиеся неисправленными проблемы совместимости с POSIX (6544, 11216, 12836, 13151, 13152, 14292). Код старой реализации fmemopen также оставлен в составе Glibc и продолжит использоваться в собранных ранее программах;
- Компоненты Glibc портированы для работы в браузерных окружениях Native Client на системах с архитектурой ARMv7-A (»--host=arm-nacl»)
- Код разбора файлов с правилами перевода времени в часовых поясах переработан с целью повышения надёжности обработки некорректных данных, что увеличило стойкость к попыткам атак через подстановку модифицированных файлов часовых поясов, которые ранее могли вызвать переполнение буфера при некорректном заполнении полей tzh_ttisstdcnt и tzh_ttisgmtcnt или при обработке файлов очень большого размера. Также добавлена защита от манипуляций значениями переменной окружения TZ (установка слишком длинной строки приводила к переполнению стека и краху);
- В реализацию TLS (Thread-local storage) добавлены оптимизации, специфичные для архитектур powerpc и powerpc64. Кроме того, по аналогии с кодом для x86 и x86–64, добавлены блоки описания для LD и GD. Для использования оптимизаций требуется установка binutils 2.24+;
- Таблицы ctype и кодировки символов приведены в соответствие со спецификацией Unicode 7.0.0. Использованы новые скрипты генерации локали, которые позволили решить возникшие при переходе на Unicode 7.0.0 проблемы с локалью, такие как несрабатывание проверки islower для некоторых символов в нижнем регистре;
- Налажена работа sigaction ABI на 32-разрядных системах SPARC (в gibc 2.19 и 2.20 данный ABI был поломан);
- Для архитектуры s390 реализована возможность запроса информации из кэша через sysconf () с опцией _SC_LEVEL1_ICACHE_SIZE;
- Заголовочный файл «regexp.h» помечен как устаревший (исключен из стандарта в 2001 году) и будет удалён в одном из ближайших выпусков. При обращении к «regexp.h» теперь выводится специальное предупреждение. Разработчикам следует перейти к использованию «regex.h» вместо «regexp.h»;
- Устранены уязвимости:
- CVE-2015–1781 — переполнение буфера в gethostbyname_r и других функциях, отправляющих запросы к DNS, потенциально позволяющее организовать выполнение кода при возврате специально оформленных ответов от подконтрольного атакующему DNS-сервера. Проблема проявляется если функции NSS вызваны с использованием невыравненного буфера.
- CVE-2014–8121 — возможность инициирования отказа в обслуживании приложения, из-за сохранения состояния NSS-вызовами getXXent и getXXbyYY в одной БД.
- Закрыт 101 отчёт об ошибках.
© OpenNet