Po sześciu miesiącach rozwoju wydanie biblioteki systemowej (glibc) , która w pełni spełnia wymagania standardów ISO C11 i POSIX.1-2017. W skład nowego wydania wchodzą poprawki od 67 programistów.
Wprowadzone w Glibc 2.32 można wymienić:
- Dodano wsparcie dla procesorów Synopsys ARC HS (ARCv2 ISA). Do działania portu wymagana jest co najmniej wersja binutils 2.32, gcc 8.3 oraz jądro Linux 5.1. Obsługiwane są trzy wersje ABI: arc-linux-gnu, arc-linux-gnuhf oraz arceb-linux-gnu (big-endian);
- Zrealizowano ładowanie modułów audytu, wskazanych w sekcjach DT_AUDIT oraz
DT_DEPAUDIT pliku wykonywalnego. - Dla architektury powerpc64le dodano wsparcie dla typu IEEE128 long double, włączanego przy kompilacji z opcją «-mabi=ieeelongdouble».
- Niektóre interfejsy API są oznaczone za pomocą atrybutu GCC ‘access’, co pozwala podczas kompilacji w GCC 10 generować bardziej jakościowe ostrzeżenia przy określaniu możliwych przepełnień buforów oraz innych typów przekroczeń dozwolonych granic.
- Dla systemów Linux zaimplementowano funkcje pthread_attr_setsigmask_np oraz
pthread_attr_getsigmask_np, dające aplikacji możliwość wskazania maski sygnału dla wątków tworzonych za pomocą pthread_create. - Dane kodowania, informacje o typach symboli i tabele transliteracji zostały zaktualizowane w celu wsparcia specyfikacji Unicode 13.0.0;
- Dodano nowy plik nagłówkowy , definiujący zmienną __libc_single_threaded, którą można stosować w aplikacjach do optymalizacji jednowątkowych.
- Dodano funkcje sigabbrev_np i sigdescr_np, zwracające skróconą nazwę i opis sygnału (na przykład „HUP” i „Hangup” dla SIGHUP).
- Dodano funkcje strerrorname_np i strerrordesc_np, zwracające nazwę i opis błędu (na przykład „EINVAL” i „Invalid argument” dla EINVAL).
- Dla platformy ARM64 wprowadzono flagę „—enable-standard-branch-protection” (lub -mbranch-protection=standard w GCC), aktywującą mechanizm ARMv8.5-BTI (Branch Target Indicator) do ochrony przed wykonywaniem zestawów instrukcji, dla których nie powinny być realizowane przeskoki przy warunkowym wykonywaniu. Zablokowanie przeskoków do dowolnych fragmentów kodu wprowadzono w celu przeciwdziałania tworzeniu gadgetów w exploitach, które wykorzystują techniki zwane programowaniem zorientowanym na zwroty (ROP — Return-Oriented Programming, w którym atakujący nie stara się umieścić swojego kodu w pamięci, lecz operuje na już istniejących fragmentach instrukcji maszynowych kończących się instrukcją powrotu, z których budowana jest łańcuch wywołań dla uzyskania pożądanej funkcjonalności).
- Przeprowadzono dużą czystkę przestarzałych funkcji, w tym usunięto opcje „—enable-obsolete-rpc” oraz „—enable-obsolete-nsl”, nagłówkowy plik . Ogłoszono przestarzałe funkcje sstk, siginterrupt, sigpause, sighold, sigrelse, sigignore oraz sigset, tablice sys_siglist, _sys_siglist oraz sys_sigabbrev, symbole sys_errlist, _sys_errlist, sys_nerr i _sys_nerr, moduł NSS hesiod.
- ldconfig domyślnie został przełączony na nowy format ld.so.cache, który jest wspierany w glibc od prawie 20 lat.
- Usunięto luki bezpieczeństwa:
- CVE-2016-10228 — zakleszczenie w narzędziu iconv, objawiające się przy uruchamianiu z opcją „-c” w przypadku przetwarzania nieprawidłowych danych multibajtowych.
- CVE-2020-10029 — uszkodzenie stosu przy wywoływaniu funkcji trygonometrycznych z pseudozerowym argumentem.
- CVE-2020-1752 — dostęp do obszaru pamięci po jej zwolnieniu (use-after-free) w funkcji glob przy rozwiązywaniu odniesienia do katalogu domowego („~user”) w ścieżkach.
- CVE-2020-6096 — niepoprawne przetwarzanie negatywnych wartości parametrów na platformie ARMv7 w memcpy() i memmove(), określających rozmiar kopiowanego obszaru. organizację wykonania kodu w funkcjach memcpy() i memmove() przy przetwarzaniu zdefiniowanym sposobem danych. Warto zauważyć, że problem niepoprawiony przez prawie dwa miesiące od publicznego ujawnienia informacji i pięć miesięcy od powiadomienia programistów Glibc.
Źródło: opennet.ru
