Выпуск системной библиотеки 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, позволяющая организовать запись данных в область за границей буфера.

Источники

править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Выпуск системной библиотеки Glibc 2.28», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.