Po sześciu miesiącach prac rozwojowych opublikowano wydanie systemowej biblioteki GNU C Library 2.42 (glibc), która w pełni odpowiada wymaganiom standardów ISO C23 i POSIX.1-2024. W stworzeniu nowej wersji wzięło udział 70 programistów.
Spośród wprowadzonych w Glibc 2.42 ulepszeń można wymienić:
- Funkcja pthread_create zyskała wsparcie dla lekkich stron ochronnych na stosie (stack guard page), do których odwołania powodują wyjątek i awaryjne zakończenie procesu (SIGSEGV). Implementacja opiera się na nowym flagu MADV_GUARD_INSTALL w wywołaniu systemowym madvise, wspieranym od jądra Linux 6.13. W porównaniu z mapowaniem w trybie PROT_NONE, strony ochronne pozwalają skuteczniej blokować wykonywanie kodu poza przydzielonym obszarem pamięci, ponieważ ich utworzenie nie wymaga przydzielania nowego obszaru pamięci wirtualnej.
- Do pliku nagłówkowego math.h dodano nowe funkcje potęgowania i obliczania pierwiastków compoundn, pown i powr, rootn oraz rsqrt, określone w standardzie ISO C23. Zaimplementowane wersje funkcji są dostępne dla typów float, double, long double, _FloatN oraz _FloatNx, a także dla ogólnego typu z tgmath.h.
- Na platformie Linux wprowadzono funkcję pthread_gettid_np, która, podobnie jak funkcja gettid(), zwraca unikalny identyfikator wątku, ale różni się rozszerzonym sprawdzaniem błędów (w przypadku wystąpienia nieokreślonego zachowania proces zostaje zakończony).
- Dodano funkcje do obliczania wartości bezwzględnych, działających z typami bez znaku: uabs, ulabs, ullabs i uimaxabs. Te funkcje wejdą w skład przyszłego standardu C.
- Na platformie Linux w interfejsie programowania termios.h wprowadzono wsparcie dla dowolnych wartości szybkości transmisji. Typ speed_t został przedefiniowany i obecnie odpowiada typowi „unsigned int”, jak ma to miejsce w jądrze Linux.
- Do lokalnego dla wątków cache (tcache), wykorzystywanego w funkcji malloc, dodano wsparcie dla buforowania dużych bloków pamięci. Maksymalny rozmiar bloku można przedefiniować za pomocą ustawienia glibc.malloc.tcache_max, które może przyjmować wartości do 4194304. Przyspieszono działanie cache dla małych bloków.
- Do skryptu konfiguracyjnego configure dodano opcję „—enable-sframe”, która włącza wsparcie dla formatu SFrame, stosowanego do przedstawiania informacji o śledzeniu stosu i wspieranego przez funkcję backtrace. Aby skorzystać z SFrame, wymagana jest przynajmniej wersja binutils 2.45.
- Z projektu CORE-MATH przeniesiono zoptymalizowane wersje funkcji matematycznych acospif, asinpif, atanpif, atan2pif, cospif, sinpif i tanpif.
- Zestaw testowy został znacznie rozszerzony, obejmując teraz różne warianty rodzin funkcji printf i scanf.
- Dodano kod do identyfikacji procesorów Intel opartych na mikroarchitekturze Arrow Lake, Panther Lake, Clearwater Forest i Diamond Rapids.
- Dodano wsparcie dla platformy z17 (nowe pokolenie mainframe'ów IBM Z/S390).
- Dodano wsparcie dla trybu zgodności w konfiguracji glibc.rtld.execstack, aby wspierać programy wymagające stosu wykonalnego przez dynamicznie ładowane biblioteki.
- Usunięto nagłówek termio.h oraz definicję struktury termio z sys/ioctl.h. Interfejs programowania termio.h został uznany za przestarzały w POSIX.1 (1988 rok) i zastąpiony przez termios.h.
- Do kompilacji Glibc wymagane są teraz co najmniej wydania GCC 12.1 i GNU Binutils 2.39.
- Usunięto luki bezpieczeństwa:
- CVE-2025-0395 — przepełnienie bufora podczas wykonywania funkcji assert(). Przepełnienie występuje, gdy podano zbyt długą nazwę programu (argv[0]). Problem ten uznawany jest za niegroźny, ponieważ poza bufor zapisywane są 4 bajty, których zawartości nie może kontrolować atakujący. Interesujący jest sam fakt wystąpienia w funkcjach debugowania podatności wynikającej z błędu w wyświetlaniu nazwy bieżącej aplikacji.
- CVE-2025-5702, CVE-2025-5745 — podatności w implementacji funkcji strcmp i strncmp dla procesorów Power10, prowadzące do awarii podczas zapisywania i przywracania rejestrów wektorowych v20-v31, które powinny być zachowane pomiędzy wywołaniami funkcji. Podatność może być użyta do nadpisania lub ustalenia zawartości danych rejestrów, używanych przez różne funkcje.
- CVE-2025-8058 — podatność w funkcji regcomp, prowadząca do podwójnego zwolnienia pamięci (double-free).
Dodatkowo można zauważyć wydanie zestawu narzędzi systemowych GNU Binutils 2.45, do którego wchodzą programy jak GNU linker, GNU assembler, nm, objdump, strings, strip.
W nowej wersji Binutils:
- W GNU assembler:
- Dodano wsparcie dla najnowszych rozszerzeń architektur RISC-V, LoongArch i AArch64. Dla x86 dodano wsparcie dla instrukcji XMODX, wdrożonych w procesorach Zhaoxin PadLock. Dla RISC-V dodano wsparcie dla instrukcji ssqosid v1.0, ssnpm v1.0, smnpm v1.0, smmpm v1.0, sspm v1.0, supm v1.0, sha v1.0, zce v1.0, smcdeleg v1.0, ssccfg v1.0, svvptc v1.0, zilsd v1.0, zclsd v1.0, smrnmi v1.0, xtheadvdot v1.0, xmipscbop v1.0, xmipscmov v1.0, xmipsexectl v1.0 i xmipslsp v1.0.
- Zapewniono zgodność generowania danych w formacie SFrame ze specyfikacją SFrame V2. Dodano wsparcie dla generowania informacji o śledzeniu stosu (.sframe) z dyrektyw CFI na 64-bitowych systemach s390 (s390x).
- Dodano wsparcie dla dyrektyw .errif i .warnif do wyświetlania komunikatów diagnostycznych przy spełnieniu określonych warunków.
- W linkerze w opcji „—stats” zaimplementowano wsparcie dla opcjonalnego argumentu, przez który można wskazać nazwę pliku do zapisywania informacji o zużyciu zasobów na różnych etapach łączenia. Nazwę pliku można również określić przez zmienną środowiskową LD_STATS. Dodano wsparcie dla nowych formatów PLT (Procedure Linkage Table) w linkerze dla systemów RISC-V.
- Wprowadzono różnorodne poprawki związane z wsparciem formatu SFrame. Funkcje do pracy z SFrame przeniesiono do wersjonowanej biblioteki libsframe.so.2.
- W dezasemblatorze i narzędziu readelf rozszerzono wsparcie dla architektury RISC-V.
Źródło: opennet.ru
