Выпуск системной библиотеки Glibc 2.32
6 августа 2020 года
После шести месяцев разработки опубликован релиз системной библиотеки GNU C Library (glibc) 2.32, которая полностью следует требованиям стандартов ISO C11 и POSIX.1-2017. В состав нового выпуска включены исправления от 67 разработчиков.
Из реализованных в Glibc 2.32 улучшений можно отметить:
- Добавлена поддержка процессоров Synopsys ARC HS (ARCv2 ISA). Для работы порта требуется как минимум binutils 2.32, gcc 8.3 и ядро Linux 5.1. Поддерживается три варианта ABI arc-linux-gnu, arc-linux-gnuhf и arceb-linux-gnu (big-endian);
- Реализована загрузка модулей аудита, указанных в секциях DT_AUDIT и DT_DEPAUDIT исполняемого файла.
- Для архитектуры powerpc64le реализована поддержка типа IEEE128 long double, включаемая при сборке с опцией "-mabi=ieeelongdouble".
- В некоторые API аннотированы с использованием GCC-атрибута 'access', позволяющего при компиляции в GCC 10 генерировать более качественные предупреждения при определении возможных переполнений буферов и других вариантов выхода за допустимые границы.
- Для Linux-систем реализованы функции pthread_attr_setsigmask_np и pthread_attr_getsigmask_np, дающие приложению возможность указать маску сигнала для потоков, созданных при помощи pthread_create.
- Данные кодировок, информация о типах символов и таблицы транслитерации обновлены для поддержки спецификации Unicode 13.0.0;
- Добавлен новый заголовочный файл <sys/single_threaded.h>, опредеяющий переменную __libc_single_threaded, которую можно исопользовать в приложениях для однопоточных оптимизаций.
- Добавлены функции sigabbrev_np и sigdescr_np, возвращающие сокращённое название и описание сигнала (например, "HUP" и Hangup" для SIGHUP).
- Добавлены функции strerrorname_np и strerrordesc_np, возвращающие имя и описание ошибки (например, "EINVAL" и "Invalid argument" для EINVAL).
- Для платформы ARM64 добавлен флаг "--enable-standard-branch-protection" (или -mbranch-protection=standard в GCC), задействующий механизм ARMv8.5-BTI (Branch Target Indicator) для защиты выполнения наборов инструкций, на которые не должны выполняться переходы при ветвлении. Блокирование переходов на произвольные участки кода реализовано для противодействия созданию гаджетов в эксплоитах, использующих приёмы возвратно-ориентированного программирования (ROP - Return-Oriented Programming, атакующий не пытается разместить свой код в памяти, а оперирует уже имеющимися кусками машинных инструкций, завершающихся инструкцией возврата управления, из которых выстраиваются цепочка вызовов для получения нужной функциональности).
- Проведена большая чистка устаревших возможностей, в том числе удалены опции "--enable-obsolete-rpc" и "--enable-obsolete-nsl", заголовочный файл <sys/sysctl.h>. Объявлены устаревшими функции sstk, siginterrupt, sigpause, sighold, sigrelse, sigignore и sigset, массивы sys_siglist, _sys_siglist и sys_sigabbrev, символы sys_errlist, _sys_errlist, sys_nerr и _sys_nerr, NSS-модуль hesiod.
- ldconfig по умолчанию переведён на использование нового формата ld.so.cache, который поддерживается в glibc уже почти 20 лет.* The hesiod NSS module has been deprecated and will be removed in a future version of glibc. System administrators are encouraged to switch to other approaches for networked account databases, such as LDAP.
- Устранены уязвимости:
- CVE-2016-10228 - зацикливание в утилите iconv, проявляющееся при запуске с опцией "-c", в случае обработки некорректных многобайтовых данных.
- CVE-2020-10029 - повреждение стека при вызове тригонометрических функций с псевдонулевым аргументом.
- CVE-2020-1752 - обращение к области памяти после её освобождения (use-after-free) в функции glob при раскрытии ссылки на домашний каталог ("~user") в путях.
- CVE-2020-6096 - на платформе ARMv7 позволяет организовать выполнение кода при обработке в функциях memcpy() и memmove() определённым образом оформленных данных. Показательно, что проблема оставалась неисправленной почти два месяца с момента публичного раскрытия информации и пять месяцев с момента уведомления разработчиков Glibc.
Источники[править]
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии[править]
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.