После недели тестирования финальных сборок официально состоялся (https://sourceware.org/ml/libc-alpha/2015-08/msg00609.html) релиз системной библиотеки GNU C Library (http://ftp.gnu.org/gnu/glibc/) (glibc) 2.22 (http://sourceware.org/glibc/wiki/Release/2.22), которая полностью следует требованиям стандартов ISO C11 и POSIX.1-2008. В подготовке нового выпуска использованы патчи от 64 разработчиков.
Из добавленных в Glibc 2.22 улучшений (http://sourceware.org/git/?p=glibc.git;a=blob_plain;f=NEWS;h...) можно отметить:
- В состав включена библиотека векторных математических функций libmvec (https://sourceware.org/glibc/wiki/libmvec), позволяющая задействовать в приложениях векторизированные реализации типовых математических функций, в которых используются SIMD (https://ru.wikipedia.org/wiki/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 (https://sourceware.org/bugzilla/show_bug.cgi?id=6544), 11216 (https://sourceware.org/bugzilla/show_bug.cgi?id=11216), 12836 (https://sourceware.org/bugzilla/show_bug.cgi?id=12836), 13151 (https://sourceware.org/bugzilla/show_bug.cgi?id=13151), 13152 (https://sourceware.org/bugzilla/show_bug.cgi?id=13152), 14292 (https://sourceware.org/bugzilla/show_bug.cgi?id=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 проблемы с локалью, такие как несрабатывание (https://sourceware.org/ml/libc-locales/2015-q1/msg00036.html) проверки islower для некоторых символов в нижнем регистре;
- Налажена работа sigaction ABI на 32-разрядных системах SPARC (в gibc 2.19 и 2.20 данный ABI был поломан);
- Для архитектуры s390 реализована возможность запроса информации из кэша через sysconf() с опцией _SC_LEVEL1_ICACHE_SIZE;
- Заголовочный файл "regexp.h" помечен как устаревший (исключен из стандарта в 2001 году) и будет удалён в одном из ближайших выпусков. При обращении к "regexp.h" теперь выводится специальное предупреждение. Разработчикам следует перейти к использованию "regex.h" вместо "regex
p
.h";
- Устранены уязвимости:
- CVE-2015-1781 - переполнение буфера в gethostbyname_r и других функциях, отправляющих запросы к DNS, потенциально позволяющее организовать выполнение кода при возврате специально оформленных ответов от подконтрольного атакующему DNS-сервера. Проблема проявляется если функции NSS вызваны с использованием невыравненного буфера.
- CVE-2014-8121 - возможность инициирования отказа в обслуживании приложения, из-за сохранения состояния NSS-вызовами getXXent и getXXbyYY в одной БД.
- Закрыт 101 отчёт об ошибках.
URL: https://sourceware.org/ml/libc-alpha/2015-08/msg00609.html
Новость: http://www.opennet.me/opennews/art.shtml?num=42797