Выпуск системной библиотеки Glibc 2.40

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

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

  • В заголовочный файл math.h добавлены новые экспоненциальные и логарифмические функции, определённые в стандарте C23: exp2m1, exp10m1.log2p1, log10p1 и logp1. Функции доступны в вариантах для типов float, double, long double, _FloatN и _FloatNx.
  • Добавлен макрос _ISOC23_SOURCE, определяющий использование возможностей, предложенных в стандарте C23 (в настоящее время в Glibc реализованы лишь часть возможностей C23). Использование C23 также можно включить при компиляции через указание в GCC опций -std=c23, -std=gnu23, -std=c2x или -std=gnu2x.
  • Добавлена настройка “glibc.rtld.enable_secure”, позволяющая при проведении тестирования запускать программу так, как если бы она имела флаг смены идентификатора пользователя (setuid).
  • На платформе Linux заголовочный файл epoll.h обновлён для поддержки новых ioctl и структур epoll, появившихся в ядре Linux 6.9.
  • Функциональность для выявления возможных переполнений буфера и связанных с безопасностью ошибок во время выполнения функций работы со строками и управления памятью (“_FORTIFY_SOURCE”) адаптирована для сборки Glibc при помощи компилятора Clang.
  • В библиотеке с векторными математическими функциями (libmvec) предложены реализации функций acosh, asinh, atanh, cbrt, cosh, erf, erfc, hypot, pow, sinh и tanh для архитектуры Aarch64.
  • На системах x86 для ускорения записи больших наборов данных в функции memset предоставлена возможность отключения использования временных буферов. Оптимизация активируется при помощи настройки “x86_memset_non_temporal_threshold”.
  • Макросы в заголовочном файле stdbit.h, работающие с различными типами (type-generic), при использовании GCC 14 переведены на использование встроенных функций __builtin_stdc_bit_ceil для поддержки операндов с типами __int128 и _BitInt(N).
  • Поля с эпохальным счётчиком времени в структурах lastlog, utmp и utmpx переведены с использования 32-разрядного знакового типа на беззнаковый тип, что позволяет продлить максимальное адресуемое счётчиком время с 2038 года до 2106 года.
  • Устранены уязвимости:
    • CVE-2024-2961– переполнение буфера при преобразовании специально оформленных строк в кодировке ISO-2022-CN-EXT функцией iconv(). На практике уязвимость может быть использована для удалённой атаки на PHP-приложения, приводящей к выполнению кода.
    • CVE-2024-33599 – переполнение буфера в коде для работы с кэшем netgroup в процессе nscd (Name Service Cache Daemon). Уязвимость может быть эксплуатирована через отправку клиентом специально оформленного запроса.
    • CVE-2024-33600 – разыменование нулевого указателя в процессе nscd, которое может привести к аварийному завершению при обработке определённых запросов.
    • CVE-2024-33601 – ошибка при работке с кэшем netgroup может привести к аварийному завершению
      процесса nscd из-за сбоя при выделении памяти.
    • CVE-2024-33602 – повреждение памяти при работе с кэшем netgroup в процессе nscd.
Release. Ссылка here.