Состоялся релиз системной библиотеки Glibc 2.22
15 августа 2015 года
После недели тестирования финальных сборок официально состоялся релиз системной библиотеки 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 (в glibc 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 отчёт об ошибках.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.