Wydanie biblioteki systemowej Glibc 2.32

Po sześciu miesiącach rozwoju opublikowany wydanie biblioteki systemowej Biblioteka GNU C (glibc) 2.32, 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 ulepszenia możesz zauważyć:

  • Dodano obsługę procesorów Synopsys ARC HS (ARCv2 ISA). Port wymaga do działania 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);
  • Ładowanie modułów audytu określonych w sekcjach DT_AUDIT i
    DT_DEPAUDIT pliku wykonywalnego.

  • Dla architektury powerpc64le zaimplementowana jest obsługa typu long double IEEE128, która jest włączana podczas budowania z opcją „-mabi=ieeelongdouble”.
  • Niektóre interfejsy API są oznaczone atrybutem „access” GCC, który umożliwia generowanie lepszych ostrzeżeń po skompilowaniu w GCC 10 w celu wykrycia możliwych przepełnień bufora i innych scenariuszy przekroczenia dopuszczalnych granic.
  • W przypadku systemów Linux funkcje pthread_attr_setsigmask_np i
    pthread_attr_getsigmask_np, które dają aplikacji możliwość określenia maski sygnału dla wątków tworzonych 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órej można używać w aplikacjach do optymalizacji jednowątkowych.
  • Dodano funkcje sigabbrev_np i sigdescr_np, które zwracają skróconą nazwę i opis sygnału (na przykład „HUP” i „Hangup” dla SIGHUP).
  • Dodano funkcje strerrorname_np i strerrordesc_np, które zwracają nazwę i opis błędu (na przykład „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ę wykonanie zestawów instrukcji, które nie powinny być wykonywane, przejścia rozgałęziające. Blokowanie przejść do dowolnych sekcji kodu ma na celu zapobieganie tworzeniu gadżetów w exploitach wykorzystujących techniki programowania zorientowanego na zwrot (ROP – Return-Oriented Programming; osoba atakująca nie próbuje umieścić swojego kodu w pamięci, ale działa na już istniejących fragmentach) instrukcji maszynowych kończących się instrukcją sterowania zwrotnego, z której budowany jest łańcuch wywołań w celu uzyskania pożądanej funkcjonalności).
  • Dokonano gruntownego oczyszczenia starszych 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 oraz moduł NSS hesiod stały się przestarzałe.
  • ldconfig został domyślnie przeniesiony do nowego formatu ld.so.cache, który jest obsługiwany w glibc od prawie 20 lat.
  • Naprawiono luki:
    • CVE-2016-10228 – W narzędziu iconv występuje pętla, gdy jest ono uruchamiane z opcją „-c” podczas przetwarzania nieprawidłowych danych wielobajtowych.
    • CVE-2020-10029 Uszkodzenie stosu podczas wywoływania funkcji trygonometrycznych z argumentem pseudonull.
    • CVE-2020-1752 — Dostęp do pamięci po zwolnieniu w funkcji glob podczas rozwijania odniesienia do katalogu domowego („~user”) w ścieżkach.
    • CVE-2020-6096 – Nieprawidłowa obsługa na platformie ARMv7 ujemnych wartości parametrów w memcpy() i memmove(), które określają rozmiar kopiowanego obszaru. Pozwala organizuje wykonanie kodu podczas przetwarzania danych sformatowanych w określony sposób w funkcjach memcpy() i memmove(). Ważne, że problem pozostał nieskorygowany przez prawie dwa miesiące od upublicznienia informacji i pięć miesięcy od powiadomienia twórców Glibc.

Źródło: opennet.ru

Dodaj komentarz