Po dwóch latach prac nad rozwojem zaprezentowano wydanie standardowej biblioteki C Musl 1.2.6, która dostarcza implementację libc, odpowiednią zarówno dla stacjonarnych komputerów i serwerów, jak i dla systemów mobilnych, łącząc pełne wsparcie dla standardów (jak w Glibc) z małym rozmiarem, niskim zużyciem zasobów i wysoką wydajnością (jak w uClibc, dietlibc i Android Bionic). Zapewnia pełne wsparcie dla wszystkich obowiązkowych interfejsów C99 i POSIX 2008, a także częściowe dla C11 oraz zestaw rozszerzeń do programowania wielowątkowego (wątki POSIX), zarządzania pamięcią i pracy z lokalizacjami. Kod Musl jest dostępny na zasadach licencji MIT.
Główne zmiany:
- Zaimplementowano funkcję posix_getdents, która pojawiła się w standardzie POSIX-2024. Funkcja ta odczytuje zawartość katalogu związanego z otwartym deskryptorem pliku i umieszcza informacje o podkatalogach i plikach w strukturach posix_dent z możliwością ograniczenia maksymalnego rozmiaru.
- Dodano specyficzną dla systemu Linux funkcję renameat2, która zapewnia środki do atomowej wymiany nazw dwóch plików (pierwszy plik jest zmieniany na drugi, a drugi na pierwszy). Funkcja renameat2 różni się od renameat obecnością dodatkowego pola flagi — bez ustawienia flagi, zachowanie renameat2 jest całkowicie analogiczne do renameat. Przy wskazaniu flagi RENAME_NOREPLACE operacja zmiany nazwy nie prowadzi do zastąpienia istniejącego już pliku.
- Dla systemów Loongarch64 dodano wsparcie dla mechanizmu TLSDESC (Thread-Local Storage Descriptor) umożliwiającego efektywny dostęp do zmiennych w lokalnym przechowywaniu wątku.
- Dzięki vDSO zoptymalizowano działanie funkcji clock_gettime na architekturach riscv32, riscv64, powerpc, powerpc64 i s390x. vDSO (virtual dynamic shared object) pozwala na przeniesienie obsługi wywołania systemowego z jądra do przestrzeni użytkownika, co umożliwia uniknięcie przełączeń kontekstu.
- Aby określić możliwości CPU w czasie wykonywania kompilatorów, symbol __getauxval został przeniesiony do publicznego ABI.
- Usunięto lukę (CVE-2025-26519), która prowadziła do przepełnienia bufora podczas konwersji specjalnie przygotowanego tekstu z kodowania EUC-KR do UTF-8 za pomocą funkcji iconv(). Luka została wykryta ponad rok temu i przed wydaniem została usunięta przez zastosowanie łatki.
- Rozwiązano problemy z kompatybilnością w funkcjach initgroups, getusershell, exit, atexit, strerror, isatty, hasmntopt oraz vdso, a także w plikach nagłówkowych sched.h i shadow.h.
- Zoptymalizowano zgodność ze specyfikacjami w funkcjach pwrite (rozwiązano problem z O_APPEND), mbnrtowcs (uwzględniono wymagania POSIX-2024), strptim (uwzględniono wymagania POSIX-2024e), inet_ntop (zapewniono zgodność z RFC 5952).
Źródło: opennet.ru
