Po sześciu miesiącach prac udostępniono bibliotekę systemową GNU C Library 2.43 (glibc), w pełni zgodną ze standardami ISO C23 i POSIX.1-2024. W powstanie nowej wersji zaangażowało się 69 programistów.
Niektóre ulepszenia wprowadzone w Glibc 2.43 obejmują:
- Dodano eksperymentalną funkcję kompilacji kompilatora Clang. Obecnie jest ona dostępna tylko dla platform aarch64-linux-gnu i x86_64-linux-gnu przy użyciu środowiska uruchomieniowego zgodnego z libgcc. Kompilacja Glibc wymaga co najmniej wersji 18 Clanga.
- Dla systemów Linux Dodano funkcję mseal(), która umożliwia procesom blokowanie modyfikacji określonych części ich przestrzeni adresowej.
- Dla systemów Linux Dodano funkcję openat2(). W przeciwieństwie do funkcji openat(), obsługuje ona zestaw dodatkowych flag ograniczających rozwiązywanie ścieżek plików (zabraniających przecinania się punktów montowania, dowiązań symbolicznych, dowiązań magicznych (/proc/PID/fd), komponentów „../”).
- Dodano funkcje free_sized, free_aligned_sized, memset_explicit i memalignment wprowadzone w standardzie C23.
- Zgodnie ze standardem C23 wywołanie assert jest zdefiniowane jako makro zmiennoprzecinkowe, które obsługuje wyrażenia przecinkowe w inicjatorze.
- 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 zdefiniowane ponownie jako makra zwracające wskaźnik do typu const, jeśli argument wejściowy jest wskaźnikiem do typu const.
- Plik nagłówkowy math.h został zaktualizowany i zawiera definicje typów long_double_t, _Float32_t, _Float64_t i _Float128_t wprowadzone w standardzie C23.
- Dodano opcjonalne tryby obliczania czasu TIME_MONOTONIC (stale rosnący czas, niezależnie od zmian zegara systemowego), TIME_ACTIVE i TIME_THREAD_ACTIVE (czas aktywnego wykonywania procesu lub wątku) do wykorzystania w funkcji timespec_get.
- Zoptymalizowane wersje funkcji matematycznych acosh, asinh, atanh, erf, erfc, lgamma i tgamma zostały przeniesione z projektu CORE-MATH.
- Dodano zoptymalizowane implementacje funkcji fma, fmaf, remainder, remaindef, frexpf, frexp, frexpl (binary128) i 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 poprzez usunięcie kodu obsługi błędów SVID (wywołanie zdefiniowanej przez użytkownika funkcji matherr w przypadku błędu) w nowych kompilacjach (aby zachować zgodność z istniejącymi programami, pozostawiono je w trybie zgodności).
- W systemach x86 dodano obsługę procesorów Intel Nova Lake i Wildcat Lake.
- W systemach AArch64 obsługa przezroczystych, dużych stron (2 MB) jest domyślnie włączona w funkcji malloc (parametr ibc.malloc.hugetlb jest teraz ustawiony na 1). Funkcja clone() wyłącza teraz stan ZA (Z-Array) na procesorach obsługujących rozszerzenie Scalable Matrix Extension (SME).
- Dla systemów AArch64 obsługujących rozszerzenie Branch Target Identification (BTI) dodano ustawienie glibc.cpu.aarch64_bti. To ustawienie umożliwia wymuszone włączenie BTI dla wszystkich plików wykonywalnych i bibliotek. BTI blokuje skoki do dowolnych sekcji kodu, aby zapobiec tworzeniu gadżetów w exploitach wykorzystujących techniki programowania zorientowanego na zwrot.
- W systemach AArch64, które obsługują jedno z rozszerzeń zabezpieczeń gałęzi (Branch Target Identification lub Guarded Control Stack), użycie zmiennej środowiskowej „LD_DEBUG=security” może spowodować, że linker wyświetli ostrzeżenia podczas ładowania plików wykonywalnych i bibliotek, które nie obsługują tych rozszerzeń.
- W systemach AArch64 dodano wersje wektorowe funkcji exp2m1, exp10m1, log10p1, log2p1 i rsqrt.
- W przypadku architektury RISC-V dodano zoptymalizowaną implementację funkcji memset przy użyciu rozszerzenia RVV (RISC-V Vector).
- Zestaw testów znacznie rozszerzył możliwości testowania wielowątkowości oraz funkcji scanf, strerror i strsignal.
- Dane kodowania, informacje o typach znaków i tabele transliteracji zostały zaktualizowane, aby obsługiwały specyfikację Unicode 17.0.0.
- Implementacja LD_PROFILE nie używa już domyślnego katalogu (/var/tmp) do zapisywania danych profilowania. Zapisywanie takich danych wymaga teraz jawnego zdefiniowania katalogu za pomocą zmiennej środowiskowej LD_PROFILE_OUTPUT.
- Naprawiono luki:
- CVE-2026-0861 – Przepełnienie całkowite w funkcji memalign powoduje uszkodzenie pamięci sterty.
- CVE-2026-0915 – Wyciek stosu w funkcjach getnetbyaddr i getnetbyaddr_r.
- CVE-2025-15281 - Niezainicjowany zwrot pamięci, który może zawierać dane resztkowe, podczas używania funkcji wordexp z parametrami WRDE_REUSE i WRDE_APPEND.
Co więcej, po roku prac projekt Cygwin wydał wersję 4.6.0 standardowej biblioteki C, newlib, opracowanej przez inżynierów Red Hat. Biblioteka ma na celu zapewnienie kompaktowej implementacji standardowej biblioteki C (libc), odpowiedniej do użytku w systemach wbudowanych o małej pojemności pamięci masowej i RAM. Kod projektu jest napisany w języku C i rozpowszechniany na licencji LGPLv2.
W nowej wersji newlib:
- Rozszerzono obsługę specyfikacji POSIX.1-2024.
- Poprawiono wydajność funkcji memcpy, mempcpy i memmove.
- Dodano opcję „--enable-newlib-hw-misaligned-access”.
- Zoptymalizowano architekturę RISC-V funkcji serii mem* i str*.
- Przeprojektowano kod obsługi ustawień regionalnych — wyeliminowano zmienną globalną global_locale_string na rzecz oddzielnych zmiennych locale_string dla każdego obiektu ustawień regionalnych typu locale_t.
- Dodano obsługę nowej platformy m68k-atari-elf.
- Kod strtorQ.c został przeniesiony z biblioteki gdtoa systemu FreeBSD, która służy do implementacji obsługi 128-bitowego typu „long double” w funkcji strtold.
- Dane kodowania zostały zaktualizowane do Unicode 17.0.
Źródło: opennet.ru
