Выпуск системной библиотеки Glibc 2.38 и набора утилит GNU Binutils 2.41

После шести месяцев разработки опубликован релиз системной библиотеки GNU C Library (glibc) 2.38, которая полностью следует требованиям стандартов ISO C11 и POSIX.1–2017. В состав нового выпуска включены исправления от 67 разработчиков.

Из реализованных в Glibc 2.38 улучшений можно отметить:

  • Добавлена поддержка работы в окружении операционной системы Hurd на системах x86_64. Для работы требуется binutils как минимум версии 2.40 и GCC версии 13.

  • Добавлены новые функции strlcpy и strlcat — альтернативы функциям strncpy и strncat, содержащие защиту от переполнения буфера и обязательно выставляющие замыкающий строку нулевой байт. Реализация функций перенесена из OpenBSD. Ожидается, что в будущем данные функции будут включены в стандарт POSIX.

  • Добавлена возможность сборки Glibc с опцией »--enable-fortify-source», включающей режим защиты »_FORTIFY_SOURCE» для выявления возможных переполнений буфера во время выполнения строковых функций, определённых в заголовочном файле string.h.

  • Для архитектуры AArch64 реализована поддержка векторной математической библиотеки libmvec. При сборке libmvec можно отключить при помощи опции »--disable-mathvec».

  • При включении поддержки будущего Си-стандарта C2X во входных параметрах функций strtol, strtoll, strtoul, strtoull, strtol_l, strtoll_l, strtoul_l, strtoull_l, strtoimax, strtoumax, strtoq, strtouq, wcstol, wcstoll, wcstoul, wcstoull, wcstol_l, wcstoll_l, wcstoul_l, wcstoull_l, wcstoimax, wcstoumax, wcstoq и wcstouq разрешено использование префиксов 0b и 0B для определения двоичных значений.

    Аналогично разрешено использование значений с префиксами 0b и 0B при определении режима форматирования через спецификатор »%i» в функциях fscanf, scanf, sscanf, vscanf, vsscanf, vfscanf, fwscanf, wscanf, swscanf, vfwscanf, vwscanf и vswscanf. Независимо от активации стандарта C2X указанные функции также поддерживают отдельный параметр форматирования »%b» для двоичных чисел.

  • В заголовочный файл inttypes.h добавлены макросы PRIb*, PRIB* и SCNb*, определённые в спецификации C2X.

  • В функции семейства printf для аргументов с типами intN_t, int_leastN_t, uintN_t и uint_leastN_t добавлена поддержка модификаторов размера «wN» в параметрах форматирования (например, %w32d для вывода значения с использованием типа int32_t). Аналогично для аргументов с типами int_fastN_t и uint_fastN_t добавлена поддержка модификаторов «wfN».

  • Добавлена настройка glibc.pthread.stack_hugetlb для отключения применения THP (Transparent Huge Pages) при распределении стека во время выполнения функции pthread_create.

  • По умолчанию прекращена сборка библиотеки libcrypt, которая в будущем вероятно будет удалена из состава Glibc. Для возвращения сборки следует использовать опцию »--enable-crypt». Разработчикам приложений рекомендуется перейти на использование альтернативных библиотек, таких как libxcrypt.

  • Удалены опции »--disable-experimental-malloc» и »--enable-tunables» (внутренние настройки теперь всегда включены).
  • Устранена уязвимость CVE-2023–25139, приводящая к переполнению буфера в функциях семейства printf при записи в буфер строковых представлений чисел с разделителями тысячных диапазонов, если размер буфера рассчитан без учёта разделителей (например, вывод 1,234,567 приведёт к переполнению на 2 байта).




В то же время опубликован релиз набора системных утилит GNU Binutils 2.41, в состав которого входят такие программы, как GNU linker, GNU assembler, nm, objdump, strings, strip.

В новой версии Binutils:

  • В порт для архитектуры MIPS добавлена поддержка процессоров Sony Interactive Entertainment Allegrex, используемых на приставках PlayStation Portable.
  • В порт для архитектурыRISC-V добавлена поддержка расширений:
    • Zicond (условные инструкции обнуления).
    • Zfa (дополнительные инструкции для вычислений с плавающей запятой).
    • Zvbb, Zvbc, Zvkg, Zvkned, Zvknh[ab], Zvksed, Zvksh, Zvkn, Zvknc, Zvkng, Zvks, Zvksc, Zvkg, Zvkt (векторные расширения для криптографии).
    • XVentanaCondOps (расширения, специфичные для процессоров Ventana Micro Systems).

  • В порт для архитектуры LoongArch добавлена поддержка расширений:
    • LSX (Loongson SIMD eXtension, 128-разрядные векторы).
    • LASX (Loongson Advanced SIMD eXtension; 256-разрядные векторы), LVZ (Loongson Virtualization).
    • LBT (Loongson Binary Translation).

  • В ассемблер (gas) добавлена поддержка инструкций и расширений наборов команд процессоров:

    • Intel: FRED, LKGS, AMX-COMPLEX.
    • AArch64: SME2.
    • LoongArch: LSX, LASX, LVZ и LBT.

  • В ассемблере реализована поддержка директивы ».insn», работающей на системах x86.

  • В компоновщик ld добавлена опция »--remap-inputs ‹PATTERN›=‹FILE›» для замены входных файлов, соответствующих маске »‹PATTERN›», на файл »‹FILE›». Также добавлена опция »--remap-inputs-file=‹FILE›», позволяющая загрузить список подобных замен из отдельного файла.

  • Для файлов в формате ELF добавлена возможность использования опции »--print-map-locals» для включения локальных символов в карту компоновки.

  • В скрипты компоновщика добавлена команда ASCIZ «string» для вставки в текущую позицию строки, оканчивающуюся нулевым символом.
  • В компоновщик добавлена команда »-z nosectionheader» для пропуска заголовка секций ELF.
  • В утилите objdump реализована возможность применения опции »--private» для показа содержимого полей из заголовков и секций файлов в формате PE. Добавлена опция »--strip-section-headers» для удаления заголовка секции из ELF-файла.
  • В gas, ld, readelf и objdump по умолчанию задействован формат SFrame Version 2.



Источник: http://www.opennet.ru/opennews/art.shtml? num=59529

© OpenNet