Wydanie biblioteki systemowej Glibc 2.35

Po sześciu miesiącach prac wydano bibliotekę systemową GNU C Library (glibc) 2.35, która jest w pełni zgodna z wymaganiami standardów ISO C11 i POSIX.1-2017. Nowa wersja zawiera poprawki od 66 programistów.

Niektóre ulepszenia wprowadzone w Glibc 2.35 obejmują:

  • Dodano obsługę ustawień regionalnych „C.UTF-8”, które obejmują reguły sortowania dla wszystkich kodów Unicode, ale aby zaoszczędzić miejsce, ograniczono użycie zakresów ASCII w funkcjach fnmatch, regexec i regcomp. Ustawienia regionalne zajmują około 400 KB, z czego 346 KB to dane LC_CTYPE dla Unicode i wymagają osobnej instalacji (nie są wbudowane w Glibc).
  • Dane kodowania, informacje o typach znaków i tabele transliteracji zostały zaktualizowane, aby obsługiwały specyfikację Unicode 14.0.0.
  • W I Następujące funkcje i makra zostały zaimplementowane, aby zaokrąglić wynik do węższego typu: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfmafNx, fMxfmafN i fMxfmafNx. Funkcje są opisane w specyfikacjach TS 18661-1:2014, TS 18661-3:2015 i zostały dodane do projektu przyszłego standardu ISO C2X C.
  • W I zaimplementowano funkcje i makra do znajdowania minimum i maksimum liczb zmiennoprzecinkowych typu float, long double, _FloatN i _FloatNx, opisane w specyfikacji IEEE 754-2019 i dodane do projektu przyszłego standardu ISO C2X C: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • W Dodano stałe dla liczb zmiennoprzecinkowych pojedynczej precyzji: M_Ef, M_LOG2Ef, M_LOG10Ef, M_LN2f, M_LN10f, M_PIf, M_PI_2f, M_PI_4f, M_1_PIf, M_2_PIf, M_2_SQRTPIf, M_SQRT2f i M_SQRT1_2f.
  • Dla funkcji exp10 w pliku nagłówkowym Dodano odpowiednie makra, które nie są powiązane ze szczególnymi typami.
  • W Dodano makro _PRINTF_NAN_LEN_MAX zaproponowane w projekcie standardu ISO C2X.
  • Rodzina funkcji printf ma teraz specyfikatory formatu „%b” i „%B” umożliwiające drukowanie liczb całkowitych w reprezentacji binarnej.
  • System dynamicznego łączenia implementuje nowy algorytm sortowania DSO, który używa metody wyszukiwania w głąb (DFS) do rozwiązywania problemów wydajnościowych podczas obsługi zależności cyklicznych. Parametr glibc.rtld.dynamic_sort jest proponowany do wybierania algorytmu sortowania DSO, który można ustawić na „1”, aby powrócić do starego algorytmu.
  • ABI obsługuje teraz nową funkcję „__memcmpeq”, która jest używana przez kompilatory w celu optymalizacji użycia funkcji „memcmp”, gdy wartość zwracana przez tę funkcję służy wyłącznie do sprawdzenia stanu zakończenia operacji.
  • Dodano obsługę automatycznej rejestracji wątków przy użyciu wywołania systemowego rseq (sekwencje z możliwością ponownego uruchomienia) udostępnianego od wersji jądra Linux 4.18. Wywołanie systemowe rseq umożliwia ciągłe, nieprzerwane wykonywanie grupy instrukcji i potwierdzanie wyniku ostatniej instrukcji w grupie. Zasadniczo zapewnia ono możliwość bardzo szybkiego, atomowego wykonywania operacji, które w przypadku przerwania przez inny wątek są kasowane i podejmowana jest próba ponownego wykonania.
  • Dodano dowiązanie symboliczne /usr/bin/ld.so.
  • Wszystkie pliki wykonywalne oprogramowania sprzętowego i zestawu testowego są teraz domyślnie kompilowane w trybie PIE (plik wykonywalny niezależny od pozycji). Opcja „--disable-default-pie” jest dostępna, aby wyłączyć to zachowanie.
  • dla Linux Dodano ustawienie glibc.malloc.hugetlb, które umożliwia przełączenie implementacji malloc na używanie wywołania systemowego madvise z flagą MADV_HUGEPAGE dla mmap i sbrk lub bezpośrednie używanie dużych stron pamięci poprzez określenie flagi MAP_HUGETLB w wywołaniach mmap. Pierwsza opcja pozwala na zwiększenie wydajności podczas korzystania z transparentnych dużych stron w trybie madvise, a druga umożliwia korzystanie z dużych stron zarezerwowanych przez system.
  • Dodano funkcję _dl_find_object, której można użyć do dodania informacji o rozwijaniu.
  • Dodano obsługę architektury OpenRISC (or1k-linux-gnu) w trybie soft-float. Ten port wymaga binutils 2.35, GCC 11 i jądra. Linux 5.4.
  • Dodano flagę kompilacji „--with-rtld-early-cflags”, której można użyć do określenia dodatkowych flag kompilacji, które mają zostać użyte podczas kompilowania początkowego kodu dla dynamicznego łączenia.
  • Dla platformy Linux Dodano funkcję epoll_pwait2, która różni się od funkcji epoll_wait tym, że określa limit czasu z dokładnością do nanosekundy.
  • Dodano funkcję posix_spawn_file_actions_addtcsetpgrp_np w celu wyeliminowania warunków wyścigu podczas ustawiania terminala sterującego dla nowego procesu.
  • W przypadku aplikacji skompilowanych za pomocą Glibc i GCC 12+ zaimplementowano tryb ochrony „_FORTIFY_SOURCE=3”, który wykrywa możliwe przepełnienia bufora podczas wykonywania funkcji string zdefiniowanych w pliku nagłówkowym string.h. Różnica w stosunku do trybu „_FORTIFY_SOURCE=2” sprowadza się do dodatkowych sprawdzeń, które potencjalnie mogą prowadzić do spadku wydajności.
  • Zaprzestano obsługi technologii Intel MPX (Memory Protection Extensions), służącej do sprawdzania zgodności wskaźników z granicami pamięci (technologia ta nie zyskała powszechnego uznania i została już usunięta z GCC i LLVM).
  • Mechanizm prelinkowania i powiązane z nim zmienne środowiskowe LD_TRACE_PRELINKING i LD_USE_LOAD_BIAS zostały uznane za przestarzałe i zostaną usunięte w przyszłej wersji.

    Naprawiono luki:

    • CVE-2022-23218, CVE-2022-23219 - Przepełnienie bufora w funkcjach svcunix_create i clnt_create spowodowane kopiowaniem zawartości parametru nazwy pliku do stosu bez sprawdzania rozmiaru kopiowanych danych. W przypadku aplikacji zbudowanych bez ochrony stosu i korzystających z protokołu „unix” luka może prowadzić do organizacji wykonania kodu atakującego podczas przetwarzania bardzo długich nazw plików.
    • CVE-2021-3998 to luka w zabezpieczeniach funkcji realpath() spowodowana zwracaniem nieprawidłowej wartości zawierającej nieoczyszczone dane resztkowe ze stosu w określonych warunkach. W przypadku programu fusermount z rootem SUID luka może zostać wykorzystana do uzyskania poufnych informacji z pamięci procesu, takich jak informacje o wskaźniku.
    • CVE-2021-3999 - Jednobajtowe przepełnienie bufora w funkcji getcwd(). Problem jest spowodowany błędem występującym od 1995 r. Aby wywołać przepełnienie, wystarczy wywołać chdir() w katalogu „/” w oddzielnej przestrzeni nazw punktu montowania.

    Źródło: opennet.ru

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster