Пускане на системната библиотека Glibc 2.41

След шестмесечно развитие, излязоха на пазара библиотеката GNU C Library (glibc) 2.41, която напълно отговаря на изискванията на стандартите ISO C11 и POSIX.1-2017. Участие в създаването на новото издание взеха 79 разработчици.

От реализираните в Glibc 2.41 подобрения могат да се отбележат:

  • За платформата Linux са добавени новите функции sched_setattr и sched_getattr, чрез които могат да се задават/прочитат параметрите на алгоритъма за планиране на задачи. На практика функциите позволяват настройка на политики за планиране на заявки, като SCHED_DEADLINE, при които се използват допълнителни параметри освен приоритета.
  • В утилитата iconv е добавена поддръжка за преобразуване на кодировка на място (ако имената на входния и изходния файлове съвпадат, iconv сега автоматично създава временно файл и след завършване на преобразуването заменя оригиналния файл с него).
  • В заглавния файл math.h са добавени тригонометрични функции, появили се в стандарта C23 (TS 18661-4:2015): acospi, asinpi, atan2pi, atanpi, cospi, sinpi и tanpi.
  • От проекта CORE-MATH са пренесени оптимизирани и използващи правилно закръгляване варианти на функциите exp10m1f, exp2m1f, expm1f, log10f, log2p1f, log1pf, log10p1f, cbrtf, erff, erfcf, lgammaf, tgammaf, tanf, acosf, acoshf, asinf, asinhf, atanf, atan2f, atanhf, coshf, sinhf и tanhf.
  • Добавена е поддръжка на разширението ARM64 GCS (Guarded Control Stack) за хардуерна защита на адресите за връщане от функции и блокиране на експлойти, използващи методи на връщащо-ориентирано програмиране (ROP — Return-Oriented Programming, експлойтът се съставя от вече налични фрагменти машинни инструкции, завършващи с инструкция за връщане на управлението). ARM64 GCS позволява за защита на процеси в пространството на потребителя да се използва техниката на теневия стек (shadow stack) — след предаване на контрола на функцията, адресите за връщане се запазват от процесора не само в обикновения стек, но и в отделен теневи стек, който не може да бъде променян директно. Преди изхода от функцията адресът за връщане се извлича от теневия стек и се сравнява с адреса за връщане от основния стек. За компилация на Glibc с поддръжка на GCS е необходимо да имате поне версии binutils 2.44 и GCC 15.
  • Извършена е обширна работа по подобряване на генерирането на код и увеличаване на производителността на математическите функции за архитектурата ARM64/AArch64. Реализирани са оптимизации с използване на векторни инструкции (SVE, Scalable Vector Extension) и SIMD разширения (Neon).
  • За системите с ARM64/AArch64 процесори е добавена поддръжка на механизма Memory Protection Keys, използван за ограничаване на достъпа до страници с памет без промяна на таблицата със страници.
  • За системите с PowerPC64 процесори е добавена поддръжка на разширени инструменти за защита от възвращаемо адресиране в експлоити.
  • Добавен е нов тип архитектура arch_kind_hygon за китайските x86-64 процесори Hygon, изградени на основата на технологии на AMD.
  • Съществено е разширен наборът за тестване на glibc, като броят на тестовете се е увеличил от 5408 на 6232 в сравнение с предишното издание.
  • Добавена е възможността за тестване на сборки на glibc с компилатори C и C++, различни от тези, използвани за фактическата сборка. Например, ‘configure TEST_CC="gcc-6.4.1" TEST_CXX="g++-6.4.1"‘ и ‘configure TEST_CC="clang" TEST_CXX="clang++"‘.
  • В опциите, задавани в файла /etc/resolv.conf и променливата на средата RES_OPTIONS, е реализирана възможността за използване на префикс „-“ за премахване на предходно зададена опция с това име. Например, ако в файла /etc/resolv.conf е посочено „options no-aaaa“, при стартиране на процес с променливата на средата „RES_OPTIONS=-no-aaaa“ ще се отмени забраната за изпращане на DNS запитвания за получаване на AAAA записи.
  • В DNS резолвера е добавена поддръжка на опцията „strict-error“, при която функцията getaddrinfo(), ако не е зададен тип на адресите (AF_UNSPEC), ще се опита да получи стойности за A (IPv4) и AAAA (IPv6) от друг DNS сървър, ако запитването за A или AAAA записи към първия DNS сървър е завършило с грешка. Без задаване на „strict-error“ в подобна ситуация ще се върне адрес, получен в резултат на успешно обработено запитване, а стойността на неуспешното запитване ще бъде игнорирана. Например, ако сървър е върнал A запис, но е дал грешка при запитването за AAAA, getaddrinfo без опцията „strict-error“ незабавно ще върне само IPv4 адреса, а с опцията „strict-error“ ще се опита да повтори запитванията към друг DNS сървър.
  • Данните за кодировки, информацията за типовете символи и таблиците за транслитерация са актуализирани за поддръжка на спецификацията Unicode 16.0.0.
  • Добавен макросът «_ISOC2Y_SOURCE», който позволява активирането на функциите, определени в черновика на стандарта C2Y. Подобни функции могат да бъдат активирани и с макроса _GNU_SOURCE и чрез флаговете на компилятора („gcc -std=gnu2y“).
  • Реализиран е инструментариум benchtest за проследяване на производителността на различни функции (обикновено математически).
  • Добавена е настройка glibc.rtld.execstack, чрез която може ясно да се забрани използването на изпълним стек.
  • Добавена е поддръжка на разширяем ABI rseq (restartable sequences), предоставящ механизъм за бързо атомарно изпълнение на операции (в случай на прекъсване на операция от друг поток, състоянието се нулира и се опитва повторно изпълнението). В новата версия е добавена възможността за използване в rseq на разширени функции, отсъстващи в оригиналния ABI, като идентификатори на паралелно изпълнение (mm_cid, memory-map concurrency ID) и идентификатори на NUMA възел (node_id).
  • Поддръжката на порта за big-endian системи ARC (arceb-linux-gnu) е прекратена.
  • Проблемът (CVE-2025-039), който води до преливане на буфер при изпълнение на функцията assert(), е решен. Преливането се появява при предоставяне на твърде голямо име на програмата (argv[0]). Проблемът се счита за неопасен, тъй като извън границите на буфера се записват 4 байта, съдържанието на които не може да контролира нападателят. Интересен е самият факт за появата на уязвимост в отладъчните функции, която възниква заради грешка при извеждане на името на текущото приложение.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster