Po dwóch miesiącach prac Linus Torvalds wydał jądro . Wśród najbardziej zauważalnych zmian: tryb pracy Ext4 bez uwzględnienia wielkości liter, oddzielne wywołania systemowe do montowania FS, sterowniki dla GPU Mali 4xx/6xx/7xx, możliwość przetwarzania zmian wartości sysctl w programach BPF, moduł device-mapper dm-dust, ochrona przed atakami MDS, wsparcie dla Sound Open Firmware dla DSP, optymalizacja wydajności BFQ, wdrożenie podsystemu PSI (Pressure Stall Information) do możliwości użycia w Androidzie.
Do nowej wersji przyjęto 15100 poprawek od 1882 deweloperów,
rozmiar łaty wynosi 62 MB (zmiany objęły 30889 plików, dodano 625094 linijek kodu, usunięto 531864 linijek). Około 45% wszystkich przedstawionych w 5.2
zmian dotyczy sterowników urządzeń, około 21% zmian ma
związek z aktualizacją kodu specyficznego dla architektur sprzętowych, 12%
związane z stosami sieciowymi, 3% — z systemami plików i 3% z wewnętrznymi
podsystemami jądra. 12,4% wszystkich zmian przygotowała firma Intel, 6,3% — Red Hat, 5,4% — Google, 4,0% — AMD, 3,1% — SUSE, 3% — IBM, 2,7% — Huawei, 2,7% — Linaro, 2,2% — ARM, 1,6% — Oracle.
:
- Podsystem dyskowy, wejście/wyjście i systemy plików
- Dla Ext4 dodano tryb pracy bez uwzględnienia wielkości liter w nazwach plików, który jest aktywowany tylko w odniesieniu do oddzielnych pustych katalogów za pomocą nowego atrybutu „+F” (EXT4_CASEFOLD_FL). Po ustawieniu tego atrybutu na katalog wszystkie operacje z plikami i podkatalogami wewnątrz będą wykonywane bez uwzględnienia wielkości liter, w tym wielkość liter będzie ignorowana podczas operacji wyszukiwania i otwierania plików (na przykład pliki Test.txt, test.txt i test.TXT w takich katalogach będą traktowane jako identyczne). Domyślnie FS nadal pozostaje wrażliwa na wielkość liter, z wyjątkiem katalogów z atrybutem „chattr +F”;
- Ujednolicone funkcje przetwarzania znaków UTF-8 w nazwach plików, które są stosowane podczas wykonywania operacji porównawczych i normalizacji łańcuchów;
- W XFS dodano infrastrukturę do śledzenia stanu systemu plików oraz nowy ioctl do zapytania o status wydajności. Zrealizowano eksperymentalną możliwość sprawdzania na bieżąco (online scrub) liczników superbloku.
- Dodano nowy moduł device-mapper „«, który umożliwia symulację pojawienia się uszkodzonych bloków na nośniku lub błędów podczas odczytywania z dysku. Moduł pozwala uprościć debugowanie i testowanie aplikacji oraz różnych systemów przechowywania w warunkach potencjalnych awarii;
- znacząca optymalizacja wydajności planisty I/O BFQ. W warunkach dużego obciążenia I/O wprowadzone optymalizacje do 80% skrócenie czasu takich operacji, jak uruchamianie aplikacji;
- Dodano szereg wywołań systemowych do montowania systemów plików: , , , , i . Te wywołania systemowe pozwalają na osobne przetwarzanie różnych etapów montowania (przetwarzanie superbloku, uzyskanie informacji o FS, zamontowanie, dołączenie do punktu montowania), które wcześniej były realizowane za pomocą wspólnego wywołania systemowego mount(). Osobne wywołania umożliwiają wykonywanie bardziej złożonych scenariuszy montowania oraz osobne wykonywanie operacji, takich jak ponowna konfiguracja superbloku, włączanie opcji, zmiana punktu montowania i przenoszenie do innej przestrzeni nazw. Ponadto, oddzielne przetwarzanie pozwala na dokładne określenie przyczyn wystąpienia kodów błędów oraz ustalanie kilku źródeł dla warstwowych FS, takich jak overlayfs;
- Do interfejsu dla asynchronicznego I/O io_uring dodano nową operację IORING_OP_SYNC_FILE_RANGE, wykonującą działania równoważne wywołaniu systemowemu , a także wdrożono możliwość rejestracji eventfd z io_uring i otrzymywania powiadomień o zakończeniu operacji;
- Dla systemu plików CIFS dodano ioctl FIEMAP, zapewniający efektywne dopasowanie extentów, a także wsparcie dla trybów SEEK_DATA i SEEK_HOLE;
- W subsystemie FUSE API do zarządzania cachowaniem danych;
- W Btrfs przeprowadzono optymalizację realizacji qgroups oraz zwiększono prędkość wykonywania fsync dla plików z wieloma twardymi linkami. Udoskonalono kod sprawdzania integralności danych, który teraz uwzględnia możliwe uszkodzenie informacji w RAM przed zapisaniem danych na dysk;
- W CEPH dodano wsparcie dla eksportu migawek przez NFS;
- Udoskonalone wdrożenie montowania NFSv4 w trybie 'soft' (w przypadku wystąpienia błędu dostępu do serwera w trybie 'soft' wywołanie od razu zwraca kod błędu, natomiast w trybie 'hard' kontrola nie jest zwracana do momentu wznowienia dostępności FS lub upłynięcia czasu). W nowej wersji zapewniono dokładniejsze przetwarzanie timeoutu, przyspieszono odzyskiwanie po awarii i dodano nową opcję montowania 'softerr', która pozwala na zmianę kodu błędu (ETIMEDOUT), zwracanego w przypadku wystąpienia timeoutu;
- W API nfsdcld, przeznaczonym do monitorowania stanu klientów NFS, wprowadzono możliwość prawidłowego śledzenia stanu klienta przez serwer NFS po ponownym uruchomieniu. W ten sposób demon nfsdcld może teraz działać jako handler nfsdcltrack;
- Dla AFS emulacja blokad zakresów bajtów w plikach ();
- Wirtualizacja i bezpieczeństwo
- Przeprowadzono prace mające na celu usunięcie miejsc w jądrze, które pozwalały na wykonywanie kodu z dostępnych do zapisu odbitych obszarów pamięci, co pozwala na zablokowanie potencjalnych luk, które mogą być wykorzystywane podczas ataków;
- Dodano nowy parametr wiersza poleceń jądra „mitigations=”, który zapewnia uproszczony sposób zarządzania włączaniem różnych technik ochrony przed lukami związanymi z spekulacyjnym wykonaniem instrukcji w CPU. Przekazanie „mitigations=off” wyłącza wszystkie dostępne metody, a domyślny tryb „mitigations=auto” włącza ochronę, ale nie wpływa na korzystanie z Hyper Threading. Tryb „mitigations=auto,nosmt” dodatkowo wyłącza Hyper Threading, jeśli wymaga tego metoda ochrony.
- wsparcie dla elektronicznego podpisu cyfrowego zgodnie z GOST R 34.10-2012 (RFC 7091, ISO/IEC 14888-3), przez Witalija Czikunowa z ‘Bazalt SPO’. Do wbudowanej realizacji TLS dodano wsparcie dla AES128-CCM. W module crypto_simd dodano wsparcie dla algorytmów AEAD;
- W Kconfig oddzielna sekcja „hardening jądra” z opcjami na wzmacnianie ochrony jądra. Obecnie w nowej sekcji zebrano tylko ustawienia do włączenia wzmacniających kontroli wtyczek GCC;
- Kod jądra prawie z nieprzerwanych wyrażeń case w switch (bez return lub break po każdym bloku case). Pozostało poprawić 32 z 2311 przypadków takiego użycia switch, po czym podczas kompilacji jądra będzie można zastosować tryb „-Wimplicit-fallthrough”;
- Dla architektury PowerPC zaimplementowano wsparcie dla sprzętowych mechanizmów ograniczających niepożądane ścieżki dostępu jądra do danych w przestrzeni użytkownika;
- Dodano kod do blokowania klasy MDS (Microarchitectural Data Sampling) w procesorach Intel. Użycie zmiennej SysFS „/sys/devices/system/cpu/vulnerabilities/mds” pozwala sprawdzić podatność systemu na tę lukę. Dwa tryby ochrony: pełny, wymagający obecności zaktualizowanego mikrokodu, oraz obejściowy, który nie gwarantuje pełnego oczyszczenia buforów CPU przy przekazywaniu kontroli do przestrzeni użytkownika lub systemu gościa. Aby zarządzać trybami ochrony, do jądra dodano parametr „mds=”, który może przyjmować wartości „full”, „full,nosmt” (+ wyłączenie Hyper-Threads) oraz „off”;
- W systemach x86-64 dla IRQ, mechanizmów debugowania i obsługi wyjątków dodano ochronę „stack guard-page”, której istotą jest wstawienie na granicy ze stosem stron pamięci, do których dostęp prowadzi do generowania wyjątków (page-fault);
- Dodano konfigurację sysctl vm.unprivileged_userfaultfd, która zarządza możliwością użycia wywołania systemowego userfaultfd() przez procesy nieprivilegowane;
- Subsystem sieciowy
- wsparcie dla bramek IPv6 w trasach IPv4. Na przykład, teraz można określać reguły routingu w postaci „ip ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0”;
- Dla ICMPv6 zaimplementowano wywołania ioctl icmp_echo_ignore_anycast i icmp_echo_ignore_multicast, które umożliwiają ignorowanie ICMP ECHO dla adresów anycast i
adresów multicast. możliwość ograniczenia intensywności przetwarzania pakietów ICMPv6; - Dla protokołu mesh B.A.T.M.A.N. („Better Approach To Mobile Adhoc Networking”), który umożliwia tworzenie zdecentralizowanych sieci, gdzie każdy węzeł jest połączony przez sąsiednie węzły, wsparcie dla translacji z multicast na unicast, a także możliwość zarządzania przez sysfs;
- W ethtool nowy parametr Fast Link Down, który umożliwia skrócenie czasu pojawiania się informacji o zdarzeniu odłączenia linku dla 1000BaseT (w normalnych warunkach opóźnienie wynosi do 750 ms);
- Pojawiło się wiązań tuneli Foo-Over-UDP do określonego adresu, interfejsu sieciowego lub gniazda (wcześniej związanie odbywało się tylko według ogólnej maski);
- W stosie bezprzewodowym możliwość wdrożenia obsługiwaczy
OWE (Opportunistic Wireless Encryption) w przestrzeni użytkownika; - W Netfilter w łańcuchach nat dodano wsparcie dla rodziny adresów inet (na przykład, teraz można używać jednej reguły translacji do obsługi ipv4 i ipv6, bez rozdzielania reguł dla ipv4 i ipv6);
- W netlink strict dla ścisłej weryfikacji poprawności wszystkich wiadomości i atrybutów, w którym nie dopuszcza się przekroczenia oczekiwanego rozmiaru atrybutów i zabrania się dodawania danych dodatkowych na końcu wiadomości;
- Pamięć i usługi systemowe
- Do systemowego wywołania clone() dodano flagę CLONE_PIDFD, której wskazanie zwraca rodzicowi deskryptor pliku „pidfd” powiązany z tworzonym procesem potomnym. Deskryptor pliku można na przykład wykorzystać do wysyłania sygnałów bez obawy o wystąpienie stanu wyścigu (tuż po wysłaniu sygnału docelowemu PID może on zostać zwolniony z powodu zakończenia działania procesu i zajęty przez inny proces);
- W drugiej wersji cgroups dodano funkcjonalność kontrolera freezer, za pomocą którego można wstrzymać pracę w cgroup i tymczasowo zwolnić niektóre zasoby (CPU, I/O i potencjalnie nawet pamięć) na rzecz realizacji innych zadań. Zarządzanie odbywa się poprzez pliki kontrolne cgroup.freeze i cgroup.events w drzewie cgroup. Zapis 1 w cgroup.freeze zamraża procesy w bieżącym cgroup i wszystkich grupach potomnych. Ponieważ zamrożenie wymaga pewnego czasu, dodatkowo udostępniono plik cgroup.events, poprzez który można się dowiedzieć o zakończeniu operacji;
- Eksport atrybutów pamięci przypisanej do każdego węzła w sysfs, co umożliwia z przestrzeni użytkownika określenie charakteru obsługi banków pamięci w systemach z heterogeniczną pamięcią;
- Udoskonalono podsystem PSI (Pressure Stall Information), który umożliwia analizę informacji o czasie oczekiwania na różne zasoby (CPU, pamięć, I/O) dla określonych zadań lub zestawów procesów w cgroup. Dzięki PSI procesory w przestrzeni użytkownika mogą dokładniej ocenić poziom obciążenia systemu i charakter spowolnienia pracy, w porównaniu do Load Average. W nowej wersji zapewniono wsparcie dla konfiguracji progów czułości oraz możliwość używania wywołania poll() do otrzymywania powiadomień o przekroczeniu ustalonych progów w określonym czasie. Ta możliwość pozwala na organizowanie w Androidzie monitorowania niedoboru pamięci na wczesnym etapie, określanie źródła problemów oraz zamykanie nieistotnych aplikacji, zanim pojawią się widoczne problemy dla użytkownika. W testach obciążeniowych narzędzia monitorujące wykorzystujące PSI wykazały dziesięć razy mniej fałszywych alarmów w porównaniu z danymi statystycznymi vmpressure;
- Przeprowadzono optymalizację kodu do weryfikacji programów BPF, co dla dużych programów przyspieszyło proces weryfikacji do 20 razy. Optymalizacja pozwoliła zwiększyć limit rozmiaru programów BPF z 4096 do miliona instrukcji;
- Dla programów BPF możliwość dostępu do danych globalnych, co umożliwia definiowanie w programach zmiennych oraz stałych globalnych;
- Dodano , co pozwala kontrolować zmiany parametrów sysctl z programów BPF;
- Dla architektury MIPS32 zaimplementowano kompilator JIT dla wirtualnej maszyny eBPF;
- Dla 32-bitowej architektury PowerPC dodano wsparcie dla narzędzia debugowania KASan (Kernel address sanitizer), które umożliwia wykrywanie błędów związanych z pamięcią;
- Na systemach x86-64 zdjęto ograniczenia dotyczące umieszczania zrzutów stanu przy awarii jądra (crash-dump) w obszarach pamięci powyżej 896 MB;
- Dla architektury s390 zaimplementowano wsparcie dla losowości adresów pamięci jądra (KASLR) oraz możliwość weryfikacji podpisów cyfrowych podczas ładowania jądra przez kexec_file_load();
- Dla architektury PA-RISC dodano wsparcie dla debuggera jądra (KGDB), etykiet przejściowych oraz kprobes;
- Sprzęt
- W skład wchodzi sterownik dla GPU Mali 400/450, wykorzystywanego w wielu starych układach opartych na architekturze ARM. Dla nowszych GPU Mali dodano sterownik Panfrost, obsługujący układy z mikroarchitekturą Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) i Bifrost (Mali G3x, G5x, G7x);
- Dodano wsparcie dla urządzeń dźwiękowych wykorzystujących otwarte oprogramowanie (). Mimo dostępności otwartych sterowników, kod oprogramowania układowego dla chipów dźwiękowych wciąż pozostawał zamknięty i dostarczany w postaci binarnej. Projekt Sound Open Firmware został opracowany przez firmę Intel w celu stworzenia otwartych oprogramowań układowych dla chipów DSP związanych z przetwarzaniem dźwięku (później do projektu dołączył również Google). Obecnie w ramach projektu opracowano otwarte oprogramowanie układowe dla chipów dźwiękowych na platformach Intel Baytrail, CherryTrail, Broadwell, ApolloLake, GeminiLake, CannonLake i IceLake;
- W sterowniku DRM Intel (i915) dodano wsparcie dla chipów
Elkhartlake (Gen11). Dodano identyfikatory PCI dla chipów Comet Lake (Gen9). Stabilizowane wsparcie dla chipów Icelake, dla których również dodano dodatkowe identyfikatory urządzeń PCI.
tryb asynchronicznego przełączania między dwoma buforami w pamięci wideo (async flip) podczas wykonywania operacji zapisu przez mmio, co pozwoliło znacząco zwiększyć wydajność niektórych aplikacji 3D (na przykład wydajność w teście 3DMark Ice Storm wzrosła o 300-400%). Dodano wsparcie dla technologii (High-bandwidth Digital Content Protection) do szyfrowania sygnału wideo przesyłanego przez HDMI; - W sterowniku amdgpu dla GPU Vega20 wsparcie dla RAS (Reliable, Available, Serviceable) i eksperymentalne wsparcie dla podsystemu SMU 11, zastępującego technologię Powerplay. Dla GPU Vega12 wsparcie dla trybu BACO (Bus Active, Chip Off). Dodano wstępne wsparcie dla XGMI, szybkiej magistrali (PCIe 4.0) do łączenia GPU. W sterowniku amdkfd dodano brakujące identyfikatory kart opartych na GPU Polaris10;
- W sterowniku Nouveau dodano wsparcie dla kart opartych na chipsecie NVIDIA Turing 117 (TU117, używanego w GeForce GTX 1650). W
kconfig ustawienie do wyłączenia przestarzałych funkcji, które nie są już stosowane w aktualnych wydaniach libdrm; - W API DRM i sterowniku amdgpu dodano wsparcie dla obiektów synchronizacyjnych „timeline”, które pozwalają zrezygnować z klasycznych blokad.
- Z gałęzi staging przeniesiono do głównej bazy sterownik vboxvideo dla wirtualnego GPU VirtualBox;
- Dodano sterownik aspeed dla chipu GFX SoC ASPEED;
- Dodano wsparcie dla ARM SoC i płyt Intel Agilex (SoCFPGA), NXP i.MX8MM, Allwinner (RerVision H3-DVK (H3), Oceanic 5205 5inMFD, Beelink GS2 (H6), Orange Pi 3 (H6)), Rockchip (Orange Pi RK3399, Nanopi NEO4, Veyron-Mighty Chromebook), Amlogic: SEI Robotics SEI510,
ST Micro (stm32mp157a, stm32mp157c), NXP (
Eckelmann ci4x10 (i.MX6DL),i.MX8MM EVK (i.MX8MM),
ZII i.MX7 RPU2 (i.MX7),
ZII SPB4 (VF610),
Zii Ultra (i.MX8M),
TQ TQMa7S (i.MX7Solo),
TQ TQMa7D (i.MX7Dual),
Kobo Aura (i.MX50),
Menlosystems M53 (i.MX53)), NVIDIA Jetson Nano (Tegra T210).
Jednocześnie Fundacja Wolnego Oprogramowania Ameryki Łacińskiej
wariant — , oczyszczone z elementów firmware i sterowników zawierających nieswolne komponenty lub fragmenty kodu, których zastosowanie jest ograniczone przez producenta. W nowym wydaniu dodano ładowanie plików
Sound Open Firmware. Wyłączono ładowanie blobów w sterownikach
mt7615, rtw88, rtw8822b, rtw8822c, btmtksdio, iqs5xx, ishtp i ucsi_ccg. Zaktualizowano kod czyszczenia blobów w sterownikach i subsystémach ixp4xx, imx-sdma, amdgpu, nouveau i goya, a także w dokumentacji do mikrocode. Zaprzestano czyszczenia blobów w sterowniku r8822be z powodu jego usunięcia.
Źródło: opennet.ru
