Wydanie biblioteki systemowej Glibc 2.31

Po sześciu miesiącach rozwoju opublikowano wydanie biblioteki systemowej GNU C Library (glibc) 2.31, który w pełni spełnia wymagania standardów ISO C11 i POSIX.1-2008. Nowa wersja zawiera poprawki od 58 deweloperów.

Zrealizowanych w Glibc 2.31 ulepszenia można wymienić:

  • Dodano makro _ISOC2X_SOURCE w celu włączenia funkcji określonych w roboczej wersji przyszłego standardu ISO C2X. Te możliwości są również włączane przy użyciu makra _GNU_SOURCE lub podczas kompilacji w gcc z flagą „-std=gnu2x”;
  • Dla funkcji zdefiniowanych w pliku nagłówkowym „math.h”, które zaokrąglają swoje wyniki do typu mniejszego rozmiaru, w pliku „tgmath.h” zaproponowano odpowiednie makra typu ogólnego, jak wymagają specyfikacje TS 18661-1:2014 i TS 18661-3:2015;
  • Dodano funkcję pthread_clockjoin_np(), która oczekuje na zakończenie wątku z uwzględnieniem timeoutu (jeśli timeout nastąpi przed zakończeniem, funkcja zwróci błąd). W przeciwieństwie do pthread_timedjoin_np(), w pthread_clockjoin_np() możliwe jest określenie rodzaju timera do obliczenia timeoutu — CLOCK_MONOTONIC (uwzględnia czas spędzony przez system w trybie uśpienia) lub CLOCK_REALTIME;
  • Do rozwiązywacza DNS dodano obsługę opcji trust-ad w /etc/resolv.conf oraz flagi RES_TRUSTAD w _res.options, które po ustawieniu umożliwiają przesyłanie flagi DNSSEC w zapytaniach DNS AD (dane uwierzytelnione). W tym trybie ustawiona przez serwer flaga AD staje się dostępna dla aplikacji wywołujących funkcje, podobne do res_search(). Domyślnie, jeśli zaproponowane opcje nie są ustawione, glibc nie wskazuje flagi AD w zapytaniach i automatycznie ją oczyszcza w odpowiedziach, co wskazuje na brak weryfikacji DNSSEC;
  • Do budowy działających powiązań wywołań systemowych dla Glibc nie jest już wymagana instalacja plików nagłówkowych jądra Linux. Wyjątek stanowi 64-bitowa architektura RISC-V;
  • Usunięto luka CVE-2019-19126, która umożliwia ominięcie ochrony
    ASLR w programach z flagą setuid i określenie rozkładu adresów w załadowanych bibliotekach poprzez manipulację zmienną środowiskową LD_PREFER_MAP_32BIT_EXEC.

Zmiany naruszające zgodność:

  • W totalorder(), totalordermag() i podobnych funkcjach dla innych typów z przecinkiem dziesiętnym teraz przyjmują jako argument wskaźniki, aby uniknąć ostrzeżeń o konwersji wartości w stanie NaN, zgodnie z zaleceniami TS 18661-1, zaproponowanymi dla przyszłego standardu C2X.
    Istniejące pliki wykonywalne, w których argumenty z przecinkiem dziesiętnym są przekazywane bezpośrednio, będą działać bez zmian;
  • Długo zapowiadana przestarzała funkcja stime jest teraz niedostępna dla binarnych plików powiązanych z glibc, a jej definicja została usunięta z time.h. Do ustawiania czasu systemowego należy używać funkcji clock_settime. W przyszłości planowane jest usunięcie także przestarzałej funkcji ftime oraz nagłówka sys/timeb.h (zamiast ftime należy używać gettimeofday lub clock_gettime);
  • Funkcja gettimeofday nie przekazuje już informacji o ogólnym strefie czasowej systemu (ta możliwość była aktualna w czasach 4.2-BSD i wiele lat temu została ogłoszona przestarzałą). Argument 'tzp' powinien teraz być przekazywany jako wskaźnik null, a aby uzyskać informacje o strefie czasowej w związku z aktualnym czasem, należy używać funkcji localtime(). Przy wywołaniu gettimeofday z niezerowym argumentem 'tzp', pola tz_minuteswest i tz_dsttime w strukturze timezone będą zwracać puste wartości. Sama funkcja gettimeofday jest uznawana za przestarzałą w POSIX (zamiast gettimeofday zaleca się użycie clock_gettime), ale nie planuje się jej usunięcia z glibc;
  • W settimeofday zakończono wsparcie dla jednoczesnego przekazywania parametrów do ustawienia czasu i przesunięcia czasowego. Podczas wywołania settimeofday jeden z argumentów (czas lub przesunięcie) musi teraz być ustawiony na wartość null, w przeciwnym razie wywołanie funkcji zakończy się błędem EINVAL. Podobnie jak gettimeofday, funkcja settimeofday jest uznawana za przestarzałą w POSIX i zamiast niej zaleca się użycie funkcji clock_settime lub rodziny funkcji adjtime;
  • Zaprzestano wsparcia dla architektury SPARC ISA v7 (wsparcie v8 wciąż jest zachowane, ale tylko dla procesorów obsługujących instrukcje CAS, takich jak procesory LEON, a nie procesory SuperSPARC).
  • W przypadku awarii wiązania w trybie „lazy«, w którym linker nie wykonuje poszukiwań symboli funkcji do pierwszego wywołania tej funkcji, funkcja dlopen teraz wymusza zakończenie działania procesu (wcześniej w przypadku błędu zwracano NULL);
  • Dla ABI MIPS hard-float teraz używany jest stos wykonywalny, chyba że podczas kompilacji wyraźnie ustawiono ograniczenie na użycie jądra Linux 4.8+ za pomocą parametru „—enable-kernel=4.8.0” (w przypadku jąder do 4.8 występują awarie w niektórych konfiguracjach MIPS);
  • Obwody wokół wywołań systemowych związanych z manipulacją czasem zostały przetłumaczone na użycie wywołania systemowego time64, o ile jest dostępne (na systemach 32-bitowych glibc najpierw próbuje używać nowych wywołań systemowych manipulujących 64-bitowym typem czasu, a jeśli ich nie ma, cofa się do starych 32-bitowych wywołań).

Ź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