Po sześciu miesiącach rozwoju wydanie biblioteki systemowej (glibc) , który jest w pełni zgodny z wymaganiami norm ISO C11 i POSIX.1-2017. Nowa wersja zawiera poprawki od 67 programistów.
Zaimplementowano w Glibc 2.32 możesz zauważyć:
- Dodano obsługę procesorów Synopsys ARC HS (ARCv2 ISA). Port wymaga co najmniej binutils 2.32, gcc 8.3 i jądra. Linux 5.1. Obsługiwane są trzy warianty ABI: arc-linux-gnu, arc-linux-gnuhf i arceb-linux-gnu (big-endian);
- Zaimplementowano ładowanie modułów audytu określonych w sekcjach DT_AUDIT i
DT_DEPAUDIT pliku wykonywalnego. - W architekturze powerpc64le zaimplementowano obsługę typu IEEE128 long double, którą można włączyć podczas kompilacji z opcją „-mabi=ieeelongdouble”.
- Niektóre interfejsy API są opatrzone adnotacją GCC „access”, dzięki której GCC 10 może generować lepsze ostrzeżenia podczas kompilacji, dotyczące potencjalnych przepełnień bufora i innych sytuacji wykraczających poza zakres.
- dla Linux-systemy zaimplementowały funkcje pthread_attr_setsigmask_np i
pthread_attr_getsigmask_np, które umożliwiają aplikacji określenie maski sygnału dla wątków utworzonych za pomocą pthread_create. - Dane kodowania, informacje o typach znaków i tabele transliteracji zostały zaktualizowane, aby obsługiwały specyfikację Unicode 13.0.0;
- Dodano nowy plik nagłówkowy , który definiuje zmienną __libc_single_threaded, która może być używana w aplikacjach do optymalizacji jednowątkowej.
- Dodano funkcje sigabbrev_np i sigdescr_np, które zwracają skróconą nazwę i opis sygnału (np. „HUP” i „Hangup” dla SIGHUP).
- Dodano funkcje strerrorname_np i strerrordesc_np, które zwracają nazwę i opis błędu (np. „EINVAL” i „Nieprawidłowy argument” dla EINVAL).
- Dla platformy ARM64 dodano flagę „--enable-standard-branch-protection” (lub -mbranch-protection=standard w GCC), która umożliwia mechanizmowi ARMv8.5-BTI (Branch Target Indicator) ochronę wykonywania zestawów instrukcji, do których nie należy przechodzić podczas rozgałęziania. Blokowanie skoków do dowolnych sekcji kodu jest implementowane w celu przeciwdziałania tworzeniu gadżetów w exploitach, które wykorzystują programowanie zorientowane na powrót (ROP - Return-Oriented Programming, atakujący nie próbuje umieścić swojego kodu w pamięci, ale operuje na istniejących fragmentach instrukcji maszynowych, które kończą się instrukcją powrotu, z której budowany jest łańcuch wywołań w celu uzyskania pożądanej funkcjonalności).
- Przeprowadzono gruntowne czyszczenie przestarzałych funkcji, w tym usunięto opcje „--enable-obsolete-rpc” i „--enable-obsolete-nsl” oraz plik nagłówkowy Funkcje sstk, siginterrupt, sigpause, sighold, sigrelse, sigignore i sigset, tablice sys_siglist, _sys_siglist i sys_sigabbrev, symbole sys_errlist, _sys_errlist, sys_nerr i _sys_nerr, moduł NSS hesiod zostały uznane za przestarzałe.
- Domyślnie ldconfig korzysta z nowego formatu ld.so.cache, który jest obsługiwany w bibliotece glibc od prawie 20 lat.
- Naprawiono luki:
- CVE-2016-10228 – W przypadku użycia opcji -c podczas przetwarzania nieprawidłowych danych wielobajtowych w narzędziu iconv występuje pętla.
- CVE-2020-10029 – Uszkodzenie stosu podczas wywoływania funkcji trygonometrycznych z argumentem pseudo-null.
- CVE-2020-1752 – Problem z użyciem funkcji glob po zwolnieniu podczas rozwijania odwołania do katalogu domowego („~user”) w ścieżkach.
- CVE-2020-6096 – Nieprawidłowa obsługa wartości ujemnych parametru w memcpy() i memmove(), który określa rozmiar kopiowanego obszaru, na platformie ARMv7. zorganizować wykonywanie kodu podczas przetwarzania danych sformatowanych w określony sposób w funkcjach memcpy() i memmove(). Istotne jest, że problem niestosowano poprawki przez prawie dwa miesiące od publicznego ujawnienia i pięć miesięcy od powiadomienia twórców Glibc.
Źródło: opennet.ru
