Wydanie biblioteki systemowej Glibc 2.41

Po sześciu miesiącach prac opublikowano wersję biblioteki GNU C Library (glibc) 2.41, która w pełni spełnia wymagania standardów ISO C11 i POSIX.1-2017. W tworzeniu nowego wydania wzięło udział 79 programistów.

Wśród usprawnień wprowadzonych w Glibc 2.41 można wyróżnić:

  • Dla platformy Linux dodano nowe funkcje sched_setattr i sched_getattr, za pomocą których można ustawić/odczytać parametry planisty zadań. W praktyce funkcje te pozwalają na dostosowanie polityk harmonogramowania zadań, takich jak SCHED_DEADLINE, które stosują dodatkowe parametry oprócz priorytetu.
  • Do narzędzia iconv dodano wsparcie dla przetwarzania kodowania w miejscu (jeśli nazwy pliku wejściowego i wyjściowego się pokrywają, iconv teraz automatycznie tworzy plik tymczasowy i po zakończeniu konwersji zastępuje nim plik źródłowy).
  • Do pliku nagłówkowego math.h dodano funkcje trygonometryczne, które pojawiły się w standardzie C23 (TS 18661-4:2015): acospi, asinpi, atan2pi, atanpi, cospi, sinpi i tanpi.
  • Z projektu CORE-MATH przeniesiono zoptymalizowane i stosujące poprawne zaokrąglenie warianty funkcji exp10m1f, exp2m1f, expm1f, log10f, log2p1f, log1pf, log10p1f, cbrtf, erff, erfcf, lgammaf, tgammaf, tanf, acosf, acoshf, asinf, asinhf, atanf, atan2f, atanhf, coshf, sinhf i tanhf.
  • Dodano wsparcie dla rozszerzenia ARM64 GCS (Guarded Control Stack) służącego do sprzętowej ochrony adresów powrotu z funkcji oraz blokowania exploitów wykorzystujących techniki programowania opartego na powrocie (ROP — Return-Oriented Programming, exploit składający się z już istniejących fragmentów instrukcji maszynowych kończących się instrukcją zwrotu). ARM64 GCS pozwala na ochronę procesów w przestrzeni użytkownika za pomocą techniki shadow stack — po przekazaniu kontroli funkcji adresy powrotu są zapisywane przez procesor nie tylko w zwykłym stosie, lecz również w osobnym stosie cieniowym, który nie może być zmieniany bezpośrednio. Przed wyjściem z funkcji adres powrotu jest pobierany ze stosu cieniowego i porównywany z adresem powrotu ze stosu głównego. Aby zbudować Glibc z obsługą GCS, wymagane są co najmniej wersje binutils 2.44 i GCC 15.
  • Przeprowadzono dużą pracę nad poprawą generowania kodu i zwiększeniem wydajności funkcji matematycznych dla architektury ARM64/AArch64. Zrealizowano optymalizacje z wykorzystaniem instrukcji wektorowych (SVE, Scalable Vector Extension) oraz rozszerzeń SIMD (Neon).
  • Dla systemów z procesorami ARM64/AArch64 dodano wsparcie dla mechanizmu Memory Protection Keys, stosowanego do ograniczenia dostępu do stron pamięci bez zmiany tabeli stron pamięci.
  • Dla systemów z procesorami PowerPC64 dodano wsparcie dla rozszerzonych instrukcji chroniących przed wykorzystaniem kodu powrotnego w exploitach.
  • Dodano nowy typ architektury arch_kind_hygon dla chińskich procesorów x86-64 Hygon, opartych na technologiach AMD.
  • Znacząco rozszerzono zestaw testów dla glibc, którego liczba testów w porównaniu do poprzedniej wersji wzrosła z 5408 do 6232.
  • Dodano możliwość testowania zbudowanej glibc z użyciem kompilatorów C i C++, innych niż te, które zostały wykorzystane do rzeczywistego budowania. Na przykład, 'configure TEST_CC="gcc-6.4.1" TEST_CXX="g++-6.4.1"' oraz 'configure TEST_CC="clang" TEST_CXX="clang++"'.
  • W opcjach określanych w pliku /etc/resolv.conf oraz w zmiennej środowiskowej RES_OPTIONS wdrożono możliwość użycia prefiksu „-” do usunięcia wcześniej ustawionej opcji o danej nazwie. Na przykład, jeśli w pliku /etc/resolv.conf znajduje się 'options no-aaaa', to przy uruchomieniu procesu z zmienną środowiskową 'RES_OPTIONS=-no-aaaa' zostanie odwołany zakaz wysyłania zapytań DNS w celu uzyskania rekordu AAAA.
  • Do resolvera DNS dodano wsparcie dla opcji „strict-error”, w której funkcja getaddrinfo(), jeśli typ adresów (AF_UNSPEC) nie został jawnie określony, spróbuje uzyskać wartości rekordów A (IPv4) i AAAA (IPv6) z innego serwera DNS, jeśli zapytanie o rekord A lub AAAA do pierwszego serwera DNS zakończyło się błędem. Bez określenia „strict-error” w podobnej sytuacji zostanie zwrócony adres uzyskany w wyniku pomyślnie przetworzonego zapytania, a wartość nieudanego zapytania zostanie zignorowana. Na przykład, jeśli serwer zwrócił rekord „A”, ale zgłosił błąd podczas zapytania „AAAA”, getaddrinfo bez opcji „strict-error” natychmiast zwróci tylko adres IPv4, a z opcją „strict-error” spróbuje ponownie złożyć zapytania do innego serwera DNS.
  • Dane kodowania, informacje o typach znaków i tabele transliteracyjne zostały zaktualizowane w celu wsparcia specyfikacji Unicode 16.0.0.
  • Dodano makro „_ISOC2Y_SOURCE”, które umożliwia aktywację funkcji określonych w szkicu standardu C2Y. Podobne funkcje można aktywować także za pomocą makra _GNU_SOURCE oraz flag kompilatora („gcc -std=gnu2y”).
  • Wdrożono narzędzie benchtest do monitorowania wydajności różnych funkcji (zwykle matematycznych).
  • Dodana została opcja glibc.rtld.execstack, która pozwala wyraźnie zabronić użycia stosu wykonywalnego.
  • Dodano wsparcie dla rozszerzalnego ABI rseq (restartowalne sekwencje), które zapewnia mechanizm szybkiego, atomowego wykonywania operacji (w przypadku przerwania operacji przez inny wątek, stan jest resetowany i podejmowana jest ponowna próba wykonania). W nowej wersji wprowadzono możliwość korzystania w rseq z rozszerzonych możliwości, brakujących w pierwotnym ABI, takich jak identyfikatory zrównoleglonej wykonania (mm_cid, identyfikator współbieżności mapy pamięci) oraz identyfikatory węzła NUMA (node_id).
  • Zaprzestano wsparcia dla portu dla systemów big-endian ARC (arceb-linux-gnu).
  • Usunięto lukę (CVE-2025-039) prowadzącą do przepełnienia bufora podczas wywoływania funkcji assert(). Przepełnienie występuje, gdy podano zbyt długą nazwę programu (argv[0]). Problem uznawany jest za niegroźny, ponieważ poza bufor zapisywane są 4 bajty, których zawartości nie może kontrolować atakujący. Ciekawy jest sam fakt wystąpienia luki w funkcjach debugowania, spowodowanej błędem podczas wyświetlania nazwy bieżącej aplikacji.

Ź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