Выпуск системной библиотеки Glibc 2.28
1 августа 2018 года
После шести месяцев разработки подготовлен релиз системной библиотеки GNU C Library (glibc) 2.28, которая полностью следует требованиям стандартов ISO C11 и POSIX.1-2008. В состав нового выпуска включены исправления от 58 разработчиков.
Из добавленных в Glibc 2.28 улучшений можно отметить:
- Обеспечена возможность сборки и запуска на системах GNU/Hurd без применения дополнительных патчей;
- Добавлена функция renameat2, предоставляющая средства для атомарной замены имён двух файлов (первый файл переименовывается во второй, а второй в первый).
Функция renameat2 отличается от renameat наличием дополнительного флагового поля. Если флаг не указан поведение renameat2 полностью аналогично renameat. Из флагов поддерживается RENAME_NOREPLACE, при котором операция переименования не приводит к замене уже существующего файла. В случае, если ядро не поддерживает системный вызов renameat2 и при вызове указаны аргументы, будет возвращена ошибка;
- Добавлена функция statx, которая отличается от fstatat64 наличием дополнительного флагового аргумента. В случае, если ядро не поддерживает системный вызов statx, возвращающего расширенную информацию о файле, включая время создания файла и специфичные для файловых систем флаги, в glibc предоставляется базовая поддержка на основе функции fstatat64;
- Добавлена поддержка потоков ISO C (threads.h), определённых в спецификации ISO/IEC 9899:2011). Для использования потоков в приложениях необходимо связывание с libpthread. В многопоточных программах можно использовать следующие функции:
- thrd_current, thrd_equal, thrd_sleep, thrd_yield, thrd_create,
thrd_detach, thrd_exit и thrd_join для управления потоками;
- mtx_init, mtx_lock, mtx_timedlock, mtx_trylock, mtx_unlock, and
mtx_destroy для управления мьютексами;
- call_once для синхронизации вызова функций;
- cnd_broadcast, cnd_destroy, cnd_init, cnd_signal, cnd_timedwait и
cnd_wait для условных переменных;
- tss_create, tss_delete, tss_get и tss_set для TLS (thread-local storage).
- Данные локализации обновлены до свежей четвёртой редакции стандарта ISO 14651 для полного соответствия с Unicode 9.0.0. Для многих локалей добавлены новые свойства "Collation", позволяющие задавать правила сортировки и методы сопоставления с учётом смысла символов. Включение данной информации привело к увеличению размера скомпилированных файлов с локалями;
- При сборке обеспечена поддержка технологии Intel CET (Control-flow Enforcement Technology). При указании сборочной опции "--enable-cet" осуществляется включение для исполняемого кода защиты с использованием инструкций IBT (indirect
branch tracking) и SHSTK (shadow stack), при этом сохраняется совместимость со всеми существующими исполняемыми файлами и библиотеками. Новый режим сборки доступен для архитектур i386, x86_64 и x32 при сборке с GCC 8 и наличии binutils 2.29;
- Добавлена корректная поддержка символов ABSOLUTE (SHN_ABS), поддерживаемых компоновщиком GNU linker;
- Кодировки, информация о типах символов и таблицы транслитерации обновлены для поддержки спецификации Unicode 11.0.0;
- Добавлены новые варианты математических функций, определённых в заголовочном файле math.h, которые округляют результат до типа narrower, определённого в спецификациях TS 18661-1:2014 и TS 18661-3:2015:
- fadd, faddl, daddl и соответствующие им fMaddfN, fMaddfNx, fMxaddfN и
fMxaddfNx;
- fsub, fsubl, dsubl и соответствующие им fMsubfN, fMsubfNx, fMxsubfN and
fMxsubfNx;
- fmul, fmull, dmull и соответствующие им fMmulfN, fMmulfNx, fMxmulfN and
fMxmulfNx;
- fdiv, fdivl, ddivl и соответствующие им fMdivfN, fMdivfNx, fMxdivfN and
fMxdivfNx;
- Добавлена локаль для якутского языка Yakut (sah_RU), в которой обеспечена поддержка двух разных грамматических форм имён месяцев;
- Для обработки интернационализированных доменных имён в функциях getaddrinfo и getnameinfo теперь используется система libidn2, при наличии соответствующей библиотеки. В случае отсутствия библиотеки libidn2 кодирование и декодирование интернационализированных имён не производится, даже при указании флагов AI_IDN и NI_IDN (указание не ASCII-символов приведёт к возврату ошибки). Ранее применяемые флаги AI_IDN_ALLOW_UNASSIGNED, AI_IDN_USE_STD3_ASCII_RULES,
NI_IDN_ALLOW_UNASSIGNED, NI_IDN_USE_STD3_ASCII_RULES объявлены устаревшими и игнорируются;
- При разборе динамических строковых токенов в DT_RPATH, DT_RUNPATH, DT_NEEDED, DT_AUXILIARY и DT_FILTER обеспечена поддержка всех выражений ELF gABI, включая конструкции '$ORIGIN$ORIGIN'. Для приложений с флагом SUID/GUID применение выражений ограничено и динамические строки интерпретируются как строковые литералы;
- Прекращена поставка устаревших заголовочных файлов libio.h и _G_config.h, функциональность которых предоставляется в stdio.h;
- Функции 'getc' и 'putc' теперь не определены в форме макросов, а реализованы через вызов (f)getc_unlocked и (f)putc_unlocked;
- Во всех функциях stdio изменено поведение при обработке конца файла в случае добавления данных после открытия файла (для чтения добавленных данных требуется вызов clearerr или функций вида fseek и rewind);
- Макросы 'major', 'minor' и 'makedev' теперь доступны только при подключении заголовочного файла sys/sysmacros.h (загрузки sys/types.h недостаточно);
- Прекращена поддержка конфигураций tilegx*-*-linux-gnu;
- Объявленные устаревшими функции ustat, fcrypt, nfsservctl, llseek, encrypt, encrypt_r, setkey, setkey_r, cbc_crypt,
ecb_crypt и des_setparity теперь не предоставляются вновь скомпонованным исполняемым файлам;
- В будущих выпусках связанные с хэшированием паролей функции будут вынесены во внешний проект и потребуют отдельной установки crypt.h и libcrypt. В текущем выпуске для отключения встроенной реализации libcrypt предложена опция "--disable-crypt";
- Для сборки glibc теперь требуется как минимум GNU make 4.0 или более новая версия;
- Устранены уязвимости:
- CVE-2016-6261, CVE-2016-6263, CVE-2017-14062 - серия уязвимостей во встроенной реализации функций для разбора интернационализированных имён доменов;
- CVE-2017-18269 - в функции memmove с оптимизациями SSE2 для архитектуры i386 выявлена уязвимость, которая может привести к повреждению областей памяти;
- CVE-2018-11236 - уязвимость в функции realpath, которая может привести к переполнению буфера при передаче слишком длинного пути;
- CVE-2018-11237 - уязвимость в реализации функции mempcpy для архитектуры Intel Xeon Phi, позволяющая организовать запись данных в область за границей буфера.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.