Выпуск системной библиотеки Glibc 2.20, ознаменовавший слияние с Eglibc
Представлен релиз системной библиотеки GNU C Library (glibc) 2.20, которая полностью следует требованиям стандартов ISO C11 и POSIX.1–2008. В подготовке нового выпуска использованы патчи от 69 разработчиков. Новый выпуск ознаменовал собой завершение процесса слияния с проектом Eglibc (Embedded GLIBC), который развивался синхронно с Glibc и был полностью совместим с ней на уровне API и ABI, отличаясь интеграцией некоторых дополнительных наработок для встраиваемых систем, более низкими системными требованиями, возможностью гибкой настройки компонентов, улучшенной поддержкой кросс-компиляции и кросс-тестирования. Последние два года проекты двигались в сторону возвращения в Glibc наработок Eglibc, к моменту выхода Glibc 2.20 данный процесс завершился и отныне пользователям и разработчикам Eglibc рекомендовано вернуться на Glibc. Выпуск Eglibc 2.19 был последним, версия Eglibc 2.20 не будет выпущена. Ранее применявшие Eglibc дистрибутивы OpenWrt, Mandriva, Debian и Ubuntu уже наметили возвращение на Glibc.
Из добавленных в Glibc 2.20 улучшений можно отметить:
Требования к минимально поддерживаемому выпуску ядра Linux повышены до 2.6.32 (ранее поддерживались выпуски ядра, начиная с 2.6.16); Для систем на основе ядра Linux добавлена поддержка блокировки на уровне описаний файлов (file descriptions, используется для обмена файловыми дескрипторами между процессами). Штатный интерфейс установки блокировок на файлы расширен средствами для блокировки на уровне описаний файлов (не путать с файловыми дескрипторами) с использованием опций F_OFD_GETLK, F_OFD_SETLK и F_OFD_SETLKW. Блокировка на уровне описания файлов ассоциируются с открытым файлом, а не процессом, т.е. корректно обрабатывает передачу открытого заблокированного файла другому процессу; Реализация функции strchr оптимизирована для архитектуры AArch64; Реализация функции strcmp оптимизирована для архитектуры ARMv7; Изменена логика выполнения тестового набора — процесс тестирования больше не прерывается после первой ошибки и выполняется полностью. Лог всех выявленных при тестировании сбоев сохраняется в файл tests.sum. После завершения тестирования на экран выводится сводка проблем. Для возврата старого поведения следует запускать «make check stop-on-test-failure=y»; Прекращена поддержка порта am33, который находится в неработоспособном состоянии уже несколько лет; Прекращена поддержка макросов тестирования _BSD_SOURCE и _SVID_SOURCE, которые теперь действуют как _DEFAULT_SOURCE с выводом предупреждения; Для архитектур s390 и s390x в реализации мьютексов pthread добавлена поддержка аппаратных механизмов проведения транзакций в памяти, определённых в составе набора расширений TX (Transactional Extensions). Внесённое улучшение позволяет увеличить масштабируемость блокировок для существующих программ, при их запуске на системах, поддерживающих расширения TX; Отменены изменения структур данных ABI, внесённые для архитектур s390 и s390x (в glibc 2.19 был увеличен размер структур ucontext и jmp_buf); Все поддерживаемые архитектуры отныне используют основную директорию sysdeps из состава glibc вместо отдельных директорий в иерархии ports; NPTL-реализация POSIXpthreads больше не позиционируется как дополнение и используется по умолчанию в конфигурациях, поддерживающих NPTL, независимо от включения опции »--enable-add-ons»; Реализация «ленивого» динамического связывания на архитектуре x86–64 приведена к совместимости с кодом приложений, в которых используются инструкции Intel MPX (состояние регистров MPX теперь сохраняется перед обращением к библиотеке); Внесено 4 изменения, связанных с безопасностью: Прекращена поддержка загружаемых модулей транслитерации gconv, которые не применяются уже более десяти лет. Поддержка обычных модулей преобразования gconv сохранена без изменений, в том числе возможно использовании транслитерации через опцию »//TRANSLIT» и применение спецификатора »//IGNORE». Удаление кода связано с выявлением уязвимости CVE-2014–5119, первые сообщения о которой были опубликованы ещё в 2005 году. Уязвимость вызвана ошибкой, приводящей к перезаписи одного байта за границей буфера при обработке некорректных данных функцией »__gconv_translit_find ()» (iconv/gconv_trans.c). В июле 2014 года проблема вновь всплыла в системе отслеживания ошибок, но участники команды устранения уязвимостей из компании Red Hat скептически отнеслись к этой ошибке и заявили, что она не подлежит эксплуатации, так как встроенные в реализацию malloc средства защиты должны блокировать проявление проблемы. Участники созданной компанией Google команды «Проект Zero» показали, что поверхностный анализ потенциальных уязвимостей не всегда адекватен и подготовили рабочий эксплоит, который может быть применён для организации запуска кода атакующего.
CVE-2014–0475 — добавлены дополнительные проверки на использование символов »/» и »…» в именах локалей, полученных через переменные окружения группы LC_*. Вызов setlocale при наличии таких имён отныне приводит к ошибке, а также при размещении очень длинных имён; CVE-2014–4043 — проблема в реализации posix_spawn_file_actions_addopen, позволяла осуществить подмену аргумента с файловым путём, через разыменования связанной с ним ссылки через последующий вызов posix_spawn; CVE-2014–6040 — ошибка в коде iconv, используемого для декодирования набора символов в кодировках IBM933, IBM935, IBM937, IBM939 и IBM1364, могла привести к чтению данных из области за пределами выделенного буфера; Исправлено около 150 ошибок.
© OpenNet