Wydanie jądra Linux 5.13

Po dwóch miesiącach prac Linus Torvalds zaprezentował wydanie jądra Linux 5.13. Wśród najbardziej zauważalnych zmian znajdują się: system plików EROFS, początkowe wsparcie dla chipów Apple M1, kontroler cgroup 'misc', zakończenie wsparcia dla /dev/kmem, wsparcie dla nowych GPU Intel i AMD, możliwość bezpośredniego wywoływania funkcji jądra z programów BPF, randomizacja stosu jądra dla każdego wywołania systemowego, możliwość kompilacji w Clang z ochroną CFI (Control Flow Integrity), moduł LSM Landlock dla dodatkowych ograniczeń procesów, wirtualne urządzenie dźwiękowe oparte na virtio oraz tryb multi-shot w io_uring.

Nowa wersja zawiera 17189 poprawek od 2150 deweloperów (najwięcej w historii), rozmiar łatek to 60 MB (zmiany dotyczą 12996 plików, dodano 794705 linii kodu, usunięto 399590 linii). Około 47% wszystkich przedstawionych w 5.13 zmian związanych jest z driverami urządzeń, około 14% zmian dotyczy aktualizacji kodu specyficznego dla architektur sprzętowych, 13% związanych jest ze stosem sieciowym, 5% — z systemami plików i 4% z wewnętrznymi podsystemami jądra.

Główne nowości:

  • Podsystem dyskowy, wejście/wyjście i systemy plików
    • Dodano wsparcie dla systemu plików EROFS (Enhanced Read-Only File System), zaproponowanego przez firmę Huawei do użycia w partycjach dostępnych w trybie tylko do odczytu. Nowy system plików wspiera przechowywanie danych w skompresowanej formie i w porównaniu do Ext4 wykazuje podobną wydajność podczas operacji sekwencyjnego odczytu, ale przewyższa Ext4 kilkakrotnie podczas losowego dostępu do danych. Na przykład, przy poziomie kompresji 4 i testach na serwerze dysku twardym, system plików EROFS przewyższył Ext4 w operacjach losowego odczytu ponad sześciokrotnie, a przy użyciu smartfona z Androidem i pamięcią Flash niemal trzykrotnie. Podobnie jak w innych systemach plików tylko do odczytu, struktura EROFS jest znacznie uproszczona dzięki odrzuceniu niektórych obszarów metadanych, takich jak mapa wolnych bloków.
    • Dla systemu plików SMB3 wprowadzono opcję montowania 'rasize', za pomocą której można określić rozmiar okna wstępnego odczytu (readahead), aby zwiększyć wydajność niektórych rodzajów obciążenia.
    • W systemie plików ext4 wprowadzono ponowne zapisywanie elementów katalogów przy usuwaniu plików. W ext4 dozwolone jest również jednoczesne używanie trybu pracy bez uwzględniania wielkości znaków oraz szyfrowania.
    • W systemie plików exFAT dodano wsparcie dla komendy ioctl FITRIM (discard), aby informować nośnik o nieużywanych blokach w systemie plików.
    • W systemie plików XFS dodano możliwość odzyskiwania miejsca z ostatniej grupy alokacji w systemie plików, co stało się pierwszym krokiem w realizacji funkcji zmniejszenia rozmiaru istniejących partycji w systemie plików XFS.
    • Wprowadzono nowy systemowy wywołanie quotactl_path, który różni się od quotactl tym, że umożliwia zarządzanie kwotami nie przez plik urządzenia specjalnego, ale poprzez wskazanie ścieżki do punktu montowania systemu plików.
    • W mechanizmie fanotify rozszerzono możliwości dostępne dla nieuprzywilejowanych użytkowników. Na przykład, podobnie jak w przypadku inotify, bez uprawnień SYS_CAP_ADMIN można teraz śledzić zdarzenia OPEN, ACCESS, MODIFY i CLOSE dla plików i katalogów.
  • Pamięć i usługi systemowe
    • Dodano nowy kontroler cgroup – „Misc” (CONFIG_CGROUP_MISC), przeznaczony do ograniczania i śledzenia zasobów skalarowych, którymi można zarządzać z użyciem prostego licznika i ograniczać je, ustalając maksymalne wartości. Jako przykład zastosowania nowego kontrolera cgroup wspomniano o zarządzaniu identyfikatorami przestrzeni adresowej używanymi w mechanizmie AMD SEV (Secure Encrypted Virtualization).
    • W interfejsie asynchronicznego wejścia/wyjścia io_uring dla zapytań POLL wprowadzono tryb „multi-shot”, w którym POLL nie jest usuwany po wygenerowaniu zdarzenia, ale pozostaje aktywny i może generować wiele zdarzeń.
    • Z gałęzi realtime jądra przeniesiono kod, który zapewnia obsługę programowo generowanych przerwań w wątkach jądra, co pozwala na ich wypieranie przez procesy o wyższym priorytecie.
    • Dodano wewnętrzną bibliotekę netfs, do której przeniesiono funkcje typowe dla użycia w sieciowych systemach plików.
    • Dla architektury PowerPC wdrożono wsparcie dla przestrzeni nazw dla czasu (time namespaces), pozwalające na używanie własnego czasu w kontenerze.
    • Dla architektury RISC-V wdrożono wsparcie dla kexec, crash dump, kprobe oraz uruchamiania jądra w miejscu (execute-in-place, wykonanie z nośnika źródłowego, bez kopiowania do pamięci RAM).
    • W programach BPF do śledzenia pojawiła się możliwość użycia lokalnego dla zadania magazynu danych (task-local storage), co zapewnia wyższą wydajność dzięki powiązaniu danych z konkretnym obsługującym BPF.
    • Wprowadzono nowy mechanizm bezpośredniego wywoływania funkcji jądra z programów BPF, który został już wykorzystany w implementacji algorytmów przeciążenia TCP. W celu zapewnienia bezpieczeństwa wywoływane funkcje muszą być wyraźnie określone w białej liście.
    • Do systemu śledzenia funkcji ftrace dodano opcję func-no-repeats, która pozwala na odzwierciedlenie powtarzających się sekwencyjnych wywołań funkcji w postaci licznika.
    • Do wywołania systemowego userfaultfd(), zaprojektowanego do obsługi page faults (odniesienia do nieprzydzielonych stron pamięci) w przestrzeni użytkownika, dodano możliwość zarządzania częściowymi fault-ami, przy których strona pamięci jest obecna, ale nie ma wpisu w tabeli stron pamięci.
    • Wsparcie dla specjalnego pliku /dev/kmem, dzięki któremu można uzyskać dostęp do całej przestrzeni adresowej jądra, zostało zakończone. Plik ten uznano za przestarzały i stwarzający problemy bezpieczeństwa.
    • Dla układów Intel wprowadzono nowy sterownik do zarządzania chłodzeniem, który pozwala na obniżenie częstotliwości procesora w przypadku ryzyka przegrzania. W przeciwieństwie do istniejącego mechanizmu aktywacji TCC (Thermal Control Circuit), nowy sterownik manipuluje wartościami względnymi, tzn. może obniżyć częstotliwość na etapie wczesnego wzrostu temperatury, nie czekając na przekroczenie krytycznego progu.
  • Wirtualizacja i bezpieczeństwo
    • Do składu dodano moduł LSM do zapewniania izolacji aplikacji Landlock, który pozwala na ograniczenie interakcji z zewnętrznym środowiskiem grupy procesów i został zaprojektowany z myślą o takich mechanizmach izolacji, jak XNU Sandbox, FreeBSD Capsicum i OpenBSD Pledge/Unveil. Logika przyznawania dostępu jest określana za pomocą programu BPF, ale w przeciwieństwie do seccomp-bpf, Landlock nie filtruje wywołań systemowych i ich argumentów, a pozwala na ograniczenie użycia obiektów jądra, takich jak hierarchie plików. Dzięki Landlock każdy proces, nawet nieuprzywilejowany, może skutecznie izolować się i zapobiegać obejściu izolacji w przypadku wykrycia luk w zabezpieczeniach lub złośliwych zmian w aplikacji. Landlock umożliwia procesowi utworzenie chronionych izolowanych środowisk, realizowanych w postaci dodatkowej warstwy nad istniejącymi systemowymi mechanizmami zarządzania dostępem. Na przykład program może zablokować dostęp do plików spoza katalogu roboczego.
    • Dodano wsparcie dla losowania przesunięć na stosie jądra podczas przetwarzania wywołań systemowych w celu utrudnienia ataków na stos. Istotą proponowanej ochrony jest wybór losowego przesunięcia stosu przy każdym wywołaniu systemowym, co utrudnia określenie układu stosu w pamięci, nawet w przypadku uzyskania informacji o adresach, ponieważ przy następnym wywołaniu systemowym podstawowy adres stosu ulegnie zmianie. Aby włączyć losowanie, zaproponowano parametry wiersza poleceń jądra „randomize_kstack_offset=on/off” oraz ustawienie CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT. Przeciążenia szacuje się na około 1% utraty wydajności.
    • Dodano wsparcie dla kompilacji jądra z włączonym mechanism ochrony CFI (Control Flow Integrity) w kompilatorze Clang, który dodaje przed każdym pośrednim wywołaniem funkcji kontrolę w celu wykrycia niektórych form nieokreślonego zachowania, które potencjalnie mogą prowadzić do naruszenia normalnego porządku wykonywania (control flow) w wyniku wykorzystania exploitów, zmieniających przechowywane w pamięci wskaźniki do funkcji. Aby włączyć CFI, zaproponowano parametr CONFIG_CFI_CLANG.
    • W dostarczonej przez jądro usłudze przechowywania kluczy szyfrowania (key ring) mechanizm zaufanych kluczy (Trusted Keys) obejmuje teraz nie tylko klucze z modułów TPM, ale także z otoczenia TEE (Trusted Execution Environment). Aby zarządzać źródłem zaufanych kluczy, zaproponowano parametr rozruchowy „trusted.source”. Ponadto dodano możliwość przetwarzania zaufanych kluczy w formacie ASN.1.
    • Dodano parametr dla wstępnego ładowania listy odwołanych certyfikatów podczas bootowania jądra. Rozwiązano problem (CVE-2020-26541) z ignorowaniem na czarnej liście certyfikatów UEFI Secure Boot dostarczanych w formacie EFI_CERT_X509_GUID, co umożliwiało uruchomienie systemu z odwołanym certyfikatem.
    • Do podsystemu kryptograficznego jądra dodano wsparcie dla weryfikacji podpisów cyfrowych ECDSA opartych na krzywych eliptycznych.
    • Zrealizowano możliwość weryfikacji polityk SELinux za pomocą podsystemu IMA (Integrity Measurement Architecture), który zapewnia utrzymywanie bazy skrótów do sprawdzania integralności danych.
  • Subsystem sieciowy
    • Wsparcie dla technologii WiMAX zostało usunięte, ponieważ nie jest już używana w publicznych sieciach, a jedynym sterownikiem, który można wykorzystać z WiMAX w jądrze, pozostaje przestarzały sterownik Intel 2400m. W konfiguratorze sieci NetworkManager wsparcie dla WiMAX zostało zakończone w 2015 roku. Obecnie WiMax praktycznie całkowicie ustąpił miejsca takim technologiom jak LTE, HSPA+ i Wi-Fi 802.11n.
    • Dodano sterownik dla adaptera sieciowego MANA (Microsoft Azure Network Adapter).
    • W sterowniku ath11k dodano wsparcie dla bezprzewodowych modułów Qualcomm QCN9074 z obsługą 802.11ax.
    • W sterowniku iwlwifi zaimplementowano możliwość pasywnego skanowania kanałów w zakresie 6GHz. Dla Ukrainy dodano wsparcie dla włączania/wyłączania IEEE 802.11ax na podstawie parametrów w BIOS.
    • Przeprowadzono optymalizację podsystemu XDP (eXpress Data Path), umożliwiającego manipulację pakietami sieciowymi na etapie przed ich przetwarzaniem przez stos sieciowy jądra Linux. Przeprowadzone testy pokazują zwiększenie wydajności XDP o 4-8%. Dla urządzeń virtio przyrost wydajności programowego przetwarzania AF_XDP może osiągać 33%.
    • W ICMP zaimplementowano wsparcie dla rozszerzonych wiadomości PROBE, określonych w RFC 8335.
    • Kontynuowana jest integracja z jądrem MPTCP (MultiPath TCP), rozszerzenia protokołu TCP do organizacji pracy połączenia TCP z dostarczaniem pakietów jednocześnie przez kilka tras przez różne interfejsy sieciowe. adresów IP. W nowym wydaniu dodano wsparcie dla sockopt w celu definiowania typowych opcji TCP. Zrealizowano możliwość resetowania poszczególnych podwątków (subflow).
    • W netfilter dodano wsparcie w zarządzaniu zasobami za pomocą ujednoliconej hierarchii cgroups v2.
    • W ethtool zrealizowano interfejs do odczytu statystyk IEEE MIB z obsługą mlx5 i bnxt. Sterowniki sieciowe mają teraz zezwolenie na wyodrębnianie dowolnych danych z SFP EEPROM, manipulując nie parą przesunięcie+rozmiar, a stronami pamięci.
  • Sprzęt
    • Zrealizowano wstępne wsparcie dla chipu ARM Apple M1, obejmujące kontroler przerwań, licznik czasu, UART, SMP, funkcje do organizacji wejścia/wyjścia i MMIO. Reverse engineering GPU nadal nie jest zakończony, wsparcie dla wyjścia oferowane jest przez framebuffer i konsolę przez port szeregowy.
    • Kontynuowano porządkowanie jądra, usuwając stare sterowniki, w tym sterowniki «gasket» (Google ASIC), «sysace», «umem» oraz kilka starych sterowników dla portów szeregowych.
    • Po 13 latach obecności w gałęzi staging, sterownik „comedi” został ustabilizowany i przeniesiony do głównego zestawu w celu wsparcia urządzeń zbierających dane.
    • Dodano sterownik GUD (Generic USB Display) z realizacją podstawowego sterownika dla ekranów i adapterów TV, podłączanych przez interfejs USB. Sterownik zapewnia właściwości DRM (Direct Rendering Manager) do obracania obrazu, zarządzania jasnością, dostępu do EDID, ustawiania trybów wideo oraz łączenia telewizorów, które mogą być wykorzystywane jako baza do tworzenia sterowników dla konkretnych urządzeń.
    • Dodano sterownik dźwiękowy „virtio” z realizacją wirtualnego urządzenia dźwiękowego, które można wykorzystać w systemach gościnnych do odtwarzania i nagrywania dźwięku bez konieczności przekazywania dostępu do karty dźwiękowej i bez emulacji.
    • W sterowniku amdgpu dodano wstępną obsługę GPU Aldebaran (gfx90a). Włączono wstępną obsługę technologii adaptacyjnej synchronizacji FreeSync dla HDMI (wcześniej dostępnej tylko dla DisplayPort), co pozwala na dostosowanie częstotliwości odświeżania informacji na ekranie. Włączono obsługę ASSR (Alternate Scrambler Seed Reset). Dodano ioctl do zapytania o możliwości związane z kodowaniem i dekodowaniem wideo. Dodano tryb CONFIG_DRM_AMD_SECURE_DISPLAY do wykrywania zmian w wyświetlaczach pokazujących krytyczne informacje. Dodano wsparcie dla mechanizmu oszczędzania energii ASPM.
    • W sterowniku i915 dla kart graficznych Intel dodano wsparcie dla układów Intel Alderlake-S. Dodano wsparcie dla eDP MSO (Embedded DisplayPort Multi-SST Operation).
    • Dodano wsparcie dla kontrolera gier Luna (Amazon) oraz dla ekranów dotykowych Hycon HY46XX, ILITEK Lego Series i MStar MSG2638.

Równocześnie latynoski Fundusz Wolnego Oprogramowania stworzył wersję w pełni wolnego jądra 5.11 — Linux-libre 5.11-gnu, oczyszczoną z elementów firmware'u i sterowników zawierających komponenty non-free lub fragmenty kodu, których zakres zastosowania jest ograniczony przez producenta. W nowym wydaniu przeprowadzono czyszczenie sterownika comedi. Wstrzymano czyszczenie sterowników cyclades, isicom tty i i2400m wimax, które zostały usunięte z jądra. Zaktualizowano kod czyszczenia blobów w sterownikach i podsystemach amdgpu, csr i915, usb r8152, mhi bus, x86 touchscreen oraz qualcomm arm64.

Ź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