Wydanie biblioteki systemowej Glibc 2.35.

Po sześciu miesiącach prac rozwojowych opublikowano wersję biblioteki systemowej GNU C Library (glibc) 2.35, która w pełni spełnia wymagania standardów ISO C11 i POSIX.1-2017. Nowe wydanie zawiera poprawki od 66 programistów.

Wśród udoskonaleń w Glibc 2.35 warto wyróżnić:

  • Dodano wsparcie dla lokalizacji „C.UTF-8”, obejmującej zasady sortowania dla wszystkich kodów Unicode, ale w celu zaoszczędzenia miejsca ograniczonej stosowaniem zakresów ASCII w funkcjach fnmatch, regexec i regcomp. Lokalizacja zajmuje około 400 KB, z czego 346 KB to dane LC_CTYPE dla Unicode, i wymaga osobnej instalacji (nie wbudowana w Glibc).
  • Dane kodowania, informacje o typach znaków oraz tabele transliteracji zostały zaktualizowane w celu wsparcia specyfikacji Unicode 14.0.0.
  • W i zaimplementowane zostały funkcje i makra, które zaokrąglają wynik do węższego typu: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN oraz fMfmafNx. Funkcje opisane są w specyfikacjach TS 18661-1:2014, TS 18661-3:2015 i dodane do roboczego projektu przyszłego standardu C ISO C2X.
  • W i zaimplementowane zostały funkcje i makra do znajdowania minimum i maksimum liczb zmiennoprzecinkowych o typach float, long double, _FloatN oraz _FloatNx, opisane w specyfikacji IEEE 754-2019 i dodane do roboczego projektu przyszłego standardu C ISO C2X: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • W dodano stałe dla liczb zmiennoprzecinkowych o 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 oraz M_SQRT1_2f.
  • Dla funkcji exp10 do nagłówka dodano odpowiednie makra, które nie są przypisane do konkretnych typów.
  • W dodano makro _PRINTF_NAN_LEN_MAX, zaproponowane w roboczym projekcie standardu ISO C2X.
  • W funkcjach z rodziny printf dodano specyfikatory formatu „%b” i „%B” do wyświetlania liczb całkowitych w postaci binarnej.
  • W systemie dynamicznego powiązania wdrożono nowy algorytm sortowania DSO, który wykorzystuje metodę przeszukiwania w głąb (DFS) w celu rozwiązania problemów z wydajnością przy przetwarzaniu cyklicznych zależności. Aby wybrać algorytm sortowania DSO, zaproponowano parametr glibc.rtld.dynamic_sort, któremu można przypisać wartość „1” w celu powrotu do starego algorytmu.
  • W ABI dodano wsparcie dla nowej funkcji ‘__memcmpeq’, używanej przez kompilatory do optymalizacji wykorzystania ‘memcmp’, w przypadku gdy wartość zwracana przez tę funkcję jest używana tylko do sprawdzania statusu zakończenia operacji.
  • Dodano wsparcie dla automatycznej rejestracji wątków za pomocą wywołania systemowego rseq (restartable sequences), dostępnego od jądra Linux 4.18. Wywołanie systemowe rseq pozwala na nieprzerwane wykonanie grupy instrukcji, które nie są przerywane i potwierdzają wynik ostatniej instrukcji w grupie. Zasadniczo udostępniono narzędzie do bardzo szybkiego atomowego wykonywania operacji, które w przypadku przerwania przez inny wątek są czyszczone i ponownie podejmowane.
  • Dodano dowiązanie symboliczne /usr/bin/ld.so.
  • Zapewniono domyślne budowanie wszystkich plików wykonywalnych wbudowanych programów i zestawu testów w trybie PIE (position independent executable). Aby wyłączyć to zachowanie, dostępna jest opcja ‘—disable-default-pie’.
  • Dla systemu Linux dodano ustawienie glibc.malloc.hugetlb, które pozwala na przełączenie implementacji malloc na wykorzystanie wywołania systemowego madvise z flagą MADV_HUGEPAGE dla mmap i sbrk lub bezpośrednie wykorzystanie dużych stron pamięci poprzez wskazanie flagi MAP_HUGETLB w wywołaniach mmap. W pierwszym przypadku można osiągnąć zwiększenie wydajności, jeśli Transparent Huge Pages są używane w trybie madvise, a w drugim udostępniona jest możliwość użycia zarezerwowanych przez system dużych stron (Huge Pages).
  • Dodano funkcję _dl_find_object, którą można wykorzystać do dodawania informacji o rozdzielaniu stosu wywołań (unwind).
  • Dodano wsparcie dla architektury OpenRISC (or1k-linux-gnu) w trybie programowego przetwarzania operacji z przecinkiem zmiennoprzecinkowym (soft-float). Do działania portu konieczne są binutils 2.35, GCC 11 oraz jądro Linux 5.4.
  • Dodano flagę kompilacyjną ‘—with-rtld-early-cflags’, za pomocą której można wskazać dodatkowe flagi kompilacji używane przy budowaniu początkowego kodu dla dynamicznego wiązania.
  • Dla platformy Linux dodano funkcję epoll_pwait2, która różni się od epoll_wait wskazaniem limitu czasowego z nanosekundową precyzją.
  • Dodano funkcję posix_spawn_file_actions_addtcsetpgrp_np, eliminującą stany wyścigu przy ustawianiu terminala sterującego dla nowego procesu.
  • Dla aplikacji kompilowanych z Glibc i GCC 12+ wprowadzono tryb zabezpieczeń „_FORTIFY_SOURCE=3”, który wykrywa potencjalne przepełnienia bufora podczas wykonywania funkcji łańcuchowych zdefiniowanych w pliku nagłówkowym string.h. Różnica w stosunku do trybu „_FORTIFY_SOURCE=2” polega na dodatkowych sprawdzeniach, które mogą potencjalnie prowadzić do obniżenia wydajności.
  • Wsparcie dla rozszerzeń Intel MPX (Memory Protection Extensions), używanych do sprawdzania wskaźników zgodności z granicami obszarów pamięci, zostało zakończone (technologia ta nie zdobyła popularności i została usunięta z GCC i LLVM).
  • Mechanizm prelink i związane z nim zmienne środowiskowe LD_TRACE_PRELINKING oraz LD_USE_LOAD_BIAS zostały ogłoszone jako przestarzałe i będą usunięte w następnej wersji.

    Usunięto luki bezpieczeństwa:

    • CVE-2022-23218, CVE-2022-23219 — przepełnienie bufora w funkcjach svcunix_create i clnt_create, spowodowane kopiowaniem na stos zawartości parametru z nazwą pliku bez sprawdzania rozmiaru kopiowanych danych. Dla aplikacji skompilowanych bez ochrony stosu i używających protokołu „unix”, podatność ta może prowadzić do wykonania kodu przez napastnika podczas przetwarzania bardzo długich nazw plików.
    • CVE-2021-3998 — podatność w funkcji realpath(), spowodowana zwracaniem w pewnych warunkach nieprawidłowej wartości, zawierającej nieoczyszczone pozostałości danych ze stosu. Dla programu SUID-root fusermount podatność ta może być wykorzystana do uzyskania poufnych informacji z pamięci procesu, na przykład do ujawnienia informacji o wskaźnikach.
    • CVE-2021-3999 — jednowątkowe przepełnienie bufora w funkcji getcwd(). Problem ten występuje od 1995 roku. Aby wywołać przepełnienie, wystarczy w oddzielnej przestrzeni nazw punktów montowania wykonać wywołanie chdir() dla katalogu „/”.

    Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster