Po sześciu miesiącach rozwoju opublikowano wersję systemowej biblioteki GNU C Library 2.43 (glibc), która w pełni spełnia wymagania standardów ISO C23 i POSIX.1-2024. W tworzeniu nowego wydania wzięło udział 69 programistów.
Wśród wprowadzonych w Glibc 2.43 ulepszeń można wymienić:
- Dodano eksperymentalną możliwość kompilacji kompilatorem Clang, która obecnie dostępna jest tylko dla platform aarch64-linux-gnu oraz x86_64-linux-gnu przy użyciu środowiska uruchomieniowego zgodnego z libgcc. Aby zbudować Glibc, wymagana jest co najmniej wersja Clang 18.
- Dodano funkcję mseal() dla systemów Linux, która pozwala procesom na blokowanie możliwości wprowadzania zmian w określonych częściach swojego adresu przestrzennego.
- Dodano funkcję openat2() dla systemów Linux, która w przeciwieństwie do funkcji openat() obsługuje zestaw dodatkowych flag do ograniczenia dostępu do ścieżki pliku (zakaz przekraczania punktów montowania, linków symbolicznych, magicznych linków (\/proc\/PID\/fd), komponentów „..\/”).
- Dodano funkcje free_sized, free_aligned_sized, memset_explicit oraz memalignment, które pojawiły się w standardzie C23.
- Zgodnie ze standardem C23 wywołanie assert zdefiniowano jako makro z zmienną liczbą argumentów, obsługującego wyrażenia z przecinkiem w inicjalizatorze.
- Zgodnie ze standardem C23 funkcje bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr i wmemchr, które zwracają wskaźniki do tablic wejściowych, zostały przedefiniowane jako makra zwracające wskaźnik do typu z kwalifikatorem „const”, jeśli wejściowy argument jest wskaźnikiem do typu z kwalifikatorem „const”.
- Do pliku nagłówkowego math.h dodano definicje typów long_double_t, _Float32_t, _Float64_t oraz _Float128_t, które pojawiły się w standardzie C23.
- Dodano opcjonalne tryby obliczania czasu TIME_MONOTONIC (ciągle rosnący czas, niezależny od zmiany zegarów systemowych), TIME_ACTIVE oraz TIME_THREAD_ACTIVE (czas aktywnego wykonywania procesu lub wątku) do użycia w funkcji timespec_get.
- Z projektu CORE-MATH przeniesiono zoptymalizowane wersje funkcji matematycznych acosh, asinh, atanh, erf, erfc, lgamma oraz tgamma.
- Dodano zoptymalizowane implementacje funkcji fma, fmaf, remainder, remaindef, frexpf, frexp, frexpl (binary128) oraz frexpl (intel96).
- Poprawiono wydajność funkcji matematycznych acosf, acoshf, asinhf, atan2f, atanhf, coshf, fmodf, lgammaf/lgammaf_r, log10f, remainderf, sinhf, sqrtf, tgammaf, y0/j0, y1/j1 i yn/jn, dzięki usunięciu kodu obsługi błędów SVID (wywołanie funkcji użytkownika matherr w przypadku błędu) dla nowych wersji (aby zachować zgodność z już skompilowanymi programami, pozostawiono je w trybie compat).
- Na systemach x86 dodano wsparcie dla procesorów Intel Nova Lake i Wildcat Lake.
- Na systemach AArch64 domyślnie w funkcji malloc włączono wsparcie dla dużych stron pamięci (transparent huge pages) o rozmiarze 2MB (parametr ibc.malloc.hugetlb jest teraz ustawiony na 1). W funkcji clone() zaimplementowano wyłączenie stanu ZA (Z-Array) na CPU z obsługą rozszerzenia SME (Scalable Matrix Extension).
- Dla systemów AArch64 obsługujących rozszerzenie BTI (Branch Target Identification) dodano opcję glibc.cpu.aarch64_bti, która pozwala na wymuszenie aktywacji BTI dla wszystkich plików wykonywalnych i bibliotek. BTI blokuje przejścia do dowolnych fragmentów kodu, aby przeciwdziałać tworzeniu gadgetów w exploitach wykorzystujących techniki zwrotu do orientowanego programowania.
- Na systemach AArch64 wspierających jedno z rozszerzeń zabezpieczeń gałęzi (Branch Target Identification lub Guarded Control Stack) dopuszczono użycie zmiennej środowiskowej „LD_DEBUG=security” do wyświetlania ostrzeżeń przez linker podczas ładowania plików wykonywalnych i bibliotek, które nie obsługują tych rozszerzeń.
- Dla systemów AArch64 dodano wektoryzowane wersje funkcji exp2m1, exp10m1, log10p1, log2p1 i rsqrt.
- Dla architektury RISC-V dodano zoptymalizowaną implementację funkcji memset, wykorzystującą rozszerzenie RVV (RISC-V Vector).
- W zestawie testów znacznie rozszerzono kontrolę wielowątkowości oraz funkcji scanf, strerror i strsignal.
- Dane kodowania, informacje o typach znaków oraz tabele transliteracji zostały zaktualizowane w celu wsparcia specyfikacji Unicode 17.0.0.
- W realizacji funkcjonalności LD_PROFILE zaprzestano korzystania z domyślnego katalogu (/var/tmp) do zapisywania danych profilowych. Teraz wymaga to jednoznacznego zdefiniowania katalogu dla tych danych poprzez zmienną środowiskową LD_PROFILE_OUTPUT.
- Usunięto luki bezpieczeństwa:
- CVE-2026-0861 — przepełnienie całkowite w funkcji memalign prowadzące do uszkodzenia sterty.
- CVE-2026-0915 — wyciek zawartości stosu w funkcjach getnetbyaddr i getnetbyaddr_r.
- CVE-2025-15281 — powrót niezinicjalizowanej pamięci, która może zawierać pozostałe dane, podczas korzystania z funkcji wordexp z parametrami WRDE_REUSE i WRDE_APPEND.
Ponadto, po roku prac projekt Cygwin opublikował wydanie standardowej biblioteki C newlib 4.6.0, rozwijanej przez inżynierów z firmy Red Hat. Biblioteka ma na celu zapewnienie zwartych realizacji standardowej biblioteki C (libc), nadającej się do użycia w systemach wbudowanych z małą ilością pamięci trwałej i operacyjnej. Kod projektu napisany jest w języku C i dystrybuowany na licencji LGPLv2.
W nowej wersji newlib:
- Rozszerzono wsparcie specyfikacji POSIX.1-2024.
- Poprawiono wydajność funkcji memcpy, mempcpy i memmove.
- Dodano opcję „—enable-newlib-hw-misaligned-access”.
- Optymalizacja architektury RISC-V funkcji z serii mem* i str*.
- Przeprojektowano kod obsługi lokalizacji, który został pozbawiony globalnej zmiennej global_locale_string na rzecz oddzielnych zmiennych locale_string dla każdego obiektu lokalizacji typu locale_t.
- Dodano wsparcie dla nowej platformy m68k-atari-elf.
- Z biblioteki gdtoa FreeBSD przeniesiono kod strtorQ.c, który jest wykorzystywany do realizacji wsparcia dla 128-bitowego typu „long double” w funkcji strtold.
- Dane kodowań zaktualizowane do Unicode 17.0.
Źródło: opennet.ru
