Выпуск стандартных Си-библиотек 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
