Выпуск стандартных Си-библиотек Glibc 2.43 и newlib 4.6.0

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

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

  • Добавлена экспериментальная возможность сборки компилятором Clang, которая пока доступна только для платформ aarch64-linux-gnu и x86_64-linux-gnu при использовании runtime, совместимого с libgcc. Для сборки Glibc требуется как минимум версия Clang 18.

  • Для систем Linux добавлена функция mseal (), позволяющая процессам выставлять блокировку на изменение определённых частей своего адресного пространства.

  • Для систем Linux добавлена функция openat2(), в отличие от функции openat () поддерживающая набор дополнительных флагов для ограничения разрешения файлового пути (запрет пересечения точек монтирования, символических ссылок, magic-ссылок (/proc/PID/fd), компонентов »…/»).

  • Добавлены функции free_sized, free_aligned_sized, memset_explicit и memalignment, появившиеся в стандарте C23.

  • В соответствии со стандартом C23 вызов assert определён как макрос с переменным числом аргументов, поддерживающий выражения с запятой внутри инициализатора.

  • В соответствии со стандартом C23 функции bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr и wmemchr, возвращающие указатели на входные массивы, переопределены как макросы, возвращающие указатель на тип с квалификатором «const», если входной аргумент является указателем на тип с квалификатором «const».

  • В заголовочный файл math.h добавлены определения типов long_double_t, _Float32_t, _Float64_t и _Float128_t, появившихся в стандарте C23.

  • Добавлены опциональные виды исчисления времени TIME_MONOTONIC (постоянно увеличивающееся время, не зависящее от изменения системных часов), TIME_ACTIVE и TIME_THREAD_ACTIVE (время активного выполнения процесса или потока) для использования в функции timespec_get.

  • Из проекта CORE-MATH перенесены оптимизированные варианты математических функций acosh, asinh, atanh, erf, erfc, lgamma и tgamma.

  • Добавлены оптимизированные реализации функций fma, fmaf, remainder, remaindef, frexpf, frexp, frexpl (binary128) и frexpl (intel96).

  • Повышена производительность математических функций acosf, acoshf, asinhf, atan2f, atanhf, coshf, fmodf, lgammaf/lgammaf_r, log10f, remainderf, sinhf, sqrtf, tgammaf, y0/j0, y1/j1 и yn/jn, благодаря удалению кода обработки ошибок SVID (вызов пользовательской функции matherr при ошибке) для новых сборок (для сохранения совместимости с уже собранными программами они оставлены в режиме compat).

  • На системах x86 добавлена поддержка процессоров Intel Nova Lake и Wildcat Lake.

  • На системах AArch64 в функции malloc по умолчанию включена поддержка больших страниц памяти (transparent huge pages), размером 2MB (параметр ibc.malloc.hugetlb теперь выставлен в 1). В функции clone () реализовано отключение состояния ZA (Z-Array) на CPU с поддержкой расширения SME (Scalable Matrix Extension).

  • Для систем AArch64, поддерживающих расширение BTI (Branch Target Identification), добавлена настройка glibc.cpu.aarch64_bti, позволяющая принудительно активировать BTI для всех исполняемых файлов и библиотек. BTI обеспечивает блокирование переходов на произвольные участки кода для противодействия созданию гаджетов в эксплоитах, использующих приёмы возвратно-ориентированного программирования.

  • На системах AArch64, поддерживающих одно из расширений для защиты ветвления (Branch Target Identification или Guarded Control Stack), разрешено использование переменной окружения «LD_DEBUG=security» для вывода компоновщиком предупреждений при загрузке исполняемых файлов и библиотек, не поддерживающих данные расширения.

  • Для систем AArch64 добавлены векторные варианты функций exp2m1, exp10m1, log10p1, log2p1 и rsqrt.

  • Для архитектуры RISC-V добавлена оптимизированная реализация функции memset, использующая расширение RVV.

  • В тестовом наборе значительно расширена проверка многопоточности и функций scanf, strerror и strsignal.

  • Данные кодировок, информация о типах символов и таблицы транслитерации обновлены для поддержки спецификации Unicode 17.0.0.

  • В реализации функциональности LD_PROFILE прекращено использование каталога по умолчанию (/var/tmp) для записи данных профилирования. Для сохранения подобных данные теперь требуется явное определение для них каталога через переменную окружения LD_PROFILE_OUTPUT.

  • Устранены уязвимости:
    • CVE-2026–0861 — целочисленное переполнение в функции memalign, приводящее к повреждению кучи.

    • CVE-2026–0915 — утечка содержимого стека в функциях getnetbyaddr и getnetbyaddr_r.

    • CVE-2025–15281 — возвращение неинициализированной памяти, которая может содержать остаточные данные, при использовании функции wordexp с параметрами WRDE_REUSE и WRDE_APPEND.

Кроме того, после года разработки проект Cygwin опубликовал выпуск стандартной Си-библиотеки newlib 4.6.0, развиваемой инженерами из компании Red Hat. Библиотека нацелена на предоставление компактной реализации стандартной Си-библиотеки (libc), пригодной для использования на встраиваемых системах c небольшим объёмом постоянного хранилища и оперативной памяти. Код проекта написан на языке Си и распространяется под лицензией LGPLv2.

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

  • Расширена поддержка спецификации POSIX.1–2024.

  • Повышена производительность функций memcpy, mempcpy и memmove.
  • Добавлена опция »--enable-newlib-hw-misaligned-access».
  • Проведена оптимизация функций серии mem* и str* для архитектуры RISC-V.
  • Переработан код обработки локалей, который избавлен от глобальной переменной global_locale_string в пользу отдельных переменных locale_string для каждого объекта локали с типом locale_t.

  • Добавлена поддержка новой платформы m68k-atari-elf.

  • Из FreeBSD-библиотеки gdtoa перенесён код strtorQ.c, который задействован для реализации поддержки 128-разрядного типа «long double» в функции strtold.

  • Данные кодировок обновлены до Unicode 17.0.



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

© OpenNet