Wydanie jądra Linuksa 5.8

Po dwóch miesiącach prac nad Linusem Torvaldsem wprowadzono wydanie jądra Linux 5.8. Wśród najbardziej zauważalnych zmian: detektor stanu wyścigu KCSAN, uniwersalny mechanizm dostarczania powiadomień do przestrzeni użytkownika, sprzętowa obsługa szyfrowania inline, ulepszone mechanizmy bezpieczeństwa dla ARM64, obsługa rosyjskiego procesora Baikal-T1, możliwość osobnego montowania instancji procfs , wdrożenie mechanizmów bezpieczeństwa Shadow dla ARM64 Call Stack i WIT.

Kernel 5.8 stał się największym pod względem liczby zmian wszystkich jąder w ciągu całego istnienia projektu. Co więcej, zmiany nie są związane z żadnym pojedynczym podsystemem, ale obejmują różne części jądra i są związane głównie z wewnętrznymi przeróbkami i czyszczeniem. Największe zmiany widać w kierowcach. Nowa wersja zawierała 17606 2081 poprawek od 20 programistów, co dotyczyło około 65% wszystkich plików w repozytorium kodu jądra. Rozmiar łatki wynosi 16180 MB (zmiany dotyczyły 1043240 489854 plików, dodano 5.7 15033 39 linii kodu, usunięto 37 5.8 linii). Dla porównania, gałąź 16 zawierała 11 3 poprawek i łatkę o rozmiarze 4 MB. Około XNUMX% wszystkich zmian wprowadzonych w wersji XNUMX dotyczy sterowników urządzeń, około XNUMX% zmian dotyczy aktualizacji kodu specyficznego dla architektur sprzętowych, XNUMX% dotyczy stosu sieciowego, XNUMX% dotyczy systemów plików, a XNUMX% są powiązane z wewnętrznymi podsystemami jądra.

Głównym innowacje:

  • Wirtualizacja i bezpieczeństwo
    • Zapewnione jest ładowanie modułów jądra, które mają sekcje z kodem, w którym ustawione są jednocześnie bity umożliwiające wykonanie i zapis. Zmiana została wdrożona jako część większego projektu mającego na celu uwolnienie jądra od użycia stron pamięci, które umożliwiają jednoczesne wykonywanie i zapis.
    • Możliwe jest teraz utworzenie oddzielnych instancji procfs, co pozwala na użycie wielu punktów montowania procfs, zamontowanych z różnymi opcjami, ale odzwierciedlających tę samą przestrzeń nazw identyfikatora procesu (przestrzeń nazw pid). Poprzednio wszystkie punkty montowania procfs odzwierciedlały tylko jedną reprezentację wewnętrzną, a każda zmiana parametrów montowania wpływała na wszystkie inne punkty montowania powiązane z tą samą przestrzenią nazw identyfikatora procesu. Wśród obszarów, w których może być potrzebny montaż z różnymi opcjami, jest wdrożenie lekkiej izolacji dla systemów wbudowanych z możliwością ukrycia niektórych typów procesów i węzłów informacyjnych w procfs.
    • Obsługa mechanizmu została zaimplementowana dla platformy ARM64
      Stos Wezwań Cienia, udostępniany przez kompilator Clang w celu ochrony przed nadpisaniem adresu zwrotnego funkcji w przypadku przepełnienia bufora stosu. Istotą zabezpieczenia jest zapisanie adresu zwrotnego na osobnym stosie „cienia” po przekazaniu sterowania do funkcji i odzyskaniu tego adresu przed wyjściem z funkcji.

    • Dodano obsługę instrukcji dla platformy ARM64 ARMv8.5-BTI (Branch Target Indicator) w celu ochrony wykonywania zestawów instrukcji, do których nie należy się rozgałęziać. Blokowanie przejść do dowolnych sekcji kodu ma na celu zapobieganie tworzeniu gadżetów w exploitach wykorzystujących techniki programowania zorientowanego na zwrot (ROP – Return-Oriented Programming; osoba atakująca nie próbuje umieścić swojego kodu w pamięci, ale działa na już istniejących fragmentach) instrukcji maszynowych kończących się instrukcją sterowania zwrotnego, z której budowany jest łańcuch wywołań w celu uzyskania pożądanej funkcjonalności).
    • Dodano obsługę sprzętową wbudowanego szyfrowania urządzeń blokowych (Szyfrowanie wbudowane). Urządzenia szyfrujące Inlinep są zwykle wbudowane w dysk, ale są logicznie rozmieszczone pomiędzy pamięcią systemową a dyskiem, w przejrzysty sposób szyfrując i deszyfrując wejścia/wyjścia w oparciu o klucze określone przez jądro i algorytm szyfrowania.
    • Dodano opcję wiersza poleceń jądra „initrdmem”, która umożliwia określenie adresu pamięci fizycznej initrd podczas umieszczania początkowego obrazu rozruchowego w pamięci RAM.
    • Dodano nową możliwość: CAP_PERFMON umożliwiający dostęp do podsystemu wydajności i monitorowanie wydajności. CAP_BPF, który umożliwia pewne operacje BPF (takie jak ładowanie programów BPF), które wcześniej wymagały uprawnień CAP_SYS_ADMIN (prawa CAP_SYS_ADMIN są teraz podzielone na kombinację CAP_BPF, CAP_PERFMON i CAP_NET_ADMIN).
    • обавлено nowe urządzenie virtio-mem, które umożliwia podłączanie i odłączanie pamięci od systemów gościa.
    • Zaimplementowano przywoływanie operacji mapowania w /dev/mem, jeśli sterownik urządzenia wykorzystuje nakładające się obszary pamięci.
    • Dodano ochronę przed lukami w zabezpieczeniach CROSSTalk/SRBDS, co pozwala na przywrócenie wyników niektórych instrukcji wykonanych na innym rdzeniu procesora.
  • Usługi pamięci i systemu
    • W dokumencie określającym zasady formatowania kodu, przyjęty zalecenia dotyczące stosowania terminologii włączającej. Nie zaleca się programistom używania kombinacji „master/slave” i „blacklist/whitelist”, a także osobnego słowa „slave”. Zalecenia dotyczą wyłącznie nowych zastosowań tych terminów. Wzmianki o określonych słowach już istniejące w rdzeniu pozostaną nietknięte. W nowym kodzie użycie oznaczonych terminów jest dozwolone, jeśli jest to wymagane do obsługi API i ABI udostępnionych w przestrzeni użytkownika, a także podczas aktualizacji kodu w celu obsługi istniejącego sprzętu lub protokołów, których specyfikacje wymagają użycia określonych terminów.
    • Dołączone narzędzie do debugowania KCSAN (Kernel Concurrency Sanitizer), przeznaczony do dynamicznego wykrywania Warunki wyścigu wewnątrz rdzenia. Użycie KCSAN jest obsługiwane podczas budowania w GCC i Clang i wymaga specjalnych modyfikacji w czasie kompilacji, aby śledzić dostęp do pamięci (stosowane są punkty przerwania, które są wyzwalane podczas odczytu lub modyfikacji pamięci). Rozwój KCSAN koncentruje się na zapobieganiu fałszywym alarmom, skalowalności i łatwości użytkowania.
    • обавлен uniwersalny mechanizm dostarczanie powiadomień z jądra do przestrzeni użytkownika. Mechanizm opiera się na standardowym sterowniku potoku i pozwala na sprawną dystrybucję powiadomień z jądra po kanałach otwartych w przestrzeni użytkownika. Punkty odbioru powiadomień to potoki otwierane w specjalnym trybie i umożliwiające gromadzenie wiadomości otrzymanych od jądra w buforze pierścieniowym. Odczyt odbywa się za pomocą zwykłej funkcji read(). Właściciel kanału określa, które źródła w jądrze muszą być monitorowane i może zdefiniować filtr ignorowający określone typy komunikatów i zdarzeń. Spośród zdarzeń obsługiwane są obecnie tylko operacje na kluczach, takie jak dodawanie/usuwanie kluczy i zmiana ich atrybutów. Planuje się, że te zdarzenia będą używane w środowisku GNOME.
    • Ciągły rozwój funkcjonalności „pidfd”, aby pomóc w obsłudze sytuacji ponownego wykorzystania PID (pidfd jest powiązany z konkretnym procesem i nie ulega zmianie, podczas gdy PID może zostać powiązany z innym procesem po zakończeniu bieżącego procesu powiązanego z tym PID). Nowa wersja dodaje obsługę użycia pidfd do dołączenia procesu do przestrzeni nazw (umożliwiając określenie pidfd podczas wykonywania wywołania systemowego setns). Użycie pidfd pozwala kontrolować dołączanie procesu do kilku typów przestrzeni nazw za pomocą jednego wywołania, znacznie zmniejszając liczbę niezbędnych wywołań systemowych i realizując dołączanie w trybie atomowym (jeśli dołączenie do jednej z przestrzeni nazw się nie powiedzie, pozostałe nie będą się łączyć) .
    • Dodano nowe wywołanie systemowe faccessat2(), inne niż
      dostęp do konta() dodatkowy argument z flagami zgodnymi z zaleceniami POSIX (wcześniej flagi te były emulowane w bibliotece C, a nowy faccessat2 pozwala na ich implementację w jądrze).

    • W Grupie C dodany ustawienie memory.swap.high, którego można użyć do spowolnienia zadań zajmujących zbyt dużo przestrzeni wymiany.
    • Do asynchronicznego interfejsu we/wy io_uring dodano obsługę wywołania systemowego tee().
    • Dodano mechanizm „Iterator BPF, zaprojektowany do wysyłania zawartości struktur jądra do przestrzeni użytkownika.
    • Pod warunkiem, że możliwość wykorzystania bufora pierścieniowego do wymiany danych pomiędzy programami BPF.
    • Do mechanizmu padata, przeznaczony do organizowania równoległego wykonywania zadań w jądrze, dodał obsługę zadań wielowątkowych z równoważeniem obciążenia.
    • W mechanizmie pstore, który pozwala zapisać informacje debugowania o przyczynie awarii w obszarach pamięci, które nie są tracone pomiędzy ponownymi uruchomieniami, dodany backend do zapisywania informacji w celu blokowania urządzeń.
    • Z gałęzi jądra PREEMPT_RT przeniósł wdrożenie zamków lokalnych.
    • обавлен nowe API alokacji buforów (AF_XDP), mające na celu uproszczenie pisania sterowników sieciowych z obsługą XDP (eXpress Data Path).
    • Dla architektury RISC-V zaimplementowano obsługę debugowania komponentów jądra przy użyciu KGDB.
    • Przed wydaniem 4.8 zwiększono wymagania dotyczące wersji GCC, której można użyć do zbudowania jądra. W jednym z kolejnych wydań planowane jest podniesienie poprzeczki do GCC 4.9.
  • Podsystem dyskowy, wejścia/wyjścia i systemy plików
    • W Maperze urządzeń dodany nowy moduł obsługi dm-ebs (emulacja rozmiaru bloku), którego można użyć do emulacji mniejszego rozmiaru bloku logicznego (na przykład do emulacji sektorów 512-bajtowych na dyskach o rozmiarze sektora 4K).
    • System plików F2FS obsługuje teraz kompresję przy użyciu algorytmu LZO-RLE.
    • W dm-krypcie dodany obsługa szyfrowanych kluczy.
    • Btrfs poprawiono obsługę operacji odczytu w trybie bezpośredniego wejścia/wyjścia. Podczas montażu przyśpieszony sprawdzanie usuniętych podsekcji i katalogów pozostawionych bez elementu nadrzędnego.
    • Do CIFS dodano parametr „nodelete”, który umożliwia normalne sprawdzanie uprawnień na serwerze, ale zabrania klientowi usuwania plików lub katalogów.
    • Ext4 ma lepszą obsługę błędów ENOSPC podczas korzystania z wielowątkowości. xattr dodał obsługę przestrzeni nazw gnu.* używanej w GNU Hurd.
    • Dla Ext4 i XFS włączona jest obsługa operacji DAX (bezpośredni dostęp do systemu plików, pominięcie pamięci podręcznej stron bez korzystania z poziomu urządzenia blokowego) w odniesieniu do poszczególnych plików i katalogów.
    • W wywołaniu systemowym statystyka() dodana flaga STATX_ATTR_DAX, który, jeśli jest określony, pobiera informacje przy użyciu aparatu DAX.
    • Odtłuszczony dodany obsługa weryfikacji obszaru rozruchowego.
    • W Tłuszczu ulepszony proaktywne ładowanie elementów FS. Testowanie wolnego dysku USB o pojemności 2 TB wykazało skrócenie czasu zakończenia testu z 383 do 51 sekund.
  • Podsystem sieciowy
    • W kodzie sterującym pracą mostów sieciowych dodany obsługa protokołu MRP (Media Redundancy Protocol), który zapewnia odporność na awarie poprzez zapętlenie wielu przełączników Ethernet.
    • Do systemu sterowania ruchem (Tc) dodany nowa akcja „bramka”, która umożliwia zdefiniowanie przedziałów czasowych przetwarzania i odrzucania poszczególnych pakietów.
    • Do jądra i narzędzia ethtool dodano obsługę testowania podłączonego kabla sieciowego i autodiagnostyki urządzeń sieciowych.
    • Do stosu IPv6 dodano obsługę algorytmu MPLS (Multiprotocol Label Switching) w celu routingu pakietów przy użyciu wieloprotokołowego przełączania etykiet (wcześniej MPLS był obsługiwany dla protokołu IPv4).
    • Dodano obsługę przesyłania pakietów IKE (Internet Key Exchange) i IPSec przez protokół TCP (RFC 8229), aby ominąć możliwe blokowanie UDP.
    • обавлено sieciowe urządzenie blokowe rnbd, które umożliwia organizację zdalnego dostępu do urządzenia blokowego z wykorzystaniem transportu RDMA (InfiniBand, RoCE, iWARP) oraz protokołu RTRS.
    • Na stosie TCP dodany obsługa kompresji zakresu w odpowiedziach selektywnego potwierdzenia (SACK).
    • Dla protokołu IPv6 wdrożone Obsługa protokołu TCP-LD (RFC 6069, Długie przerwy w łączności).
  • Sprzęt
    • Sterownik i915 DRM dla kart graficznych Intel domyślnie obsługuje chipy Intel Tiger Lake (GEN12), dla których wdrożone możliwość wykorzystania systemu SAGV (System Agent Geyserville) do dynamicznej regulacji częstotliwości i napięcia w zależności od poboru mocy lub wymagań wydajnościowych.
    • W sterowniku amdgpu dodano obsługę formatu pikseli FP16 oraz możliwość pracy z szyfrowanymi buforami w pamięci wideo (TMZ, Trusted Memory Zone).
    • Dodano obsługę czujników mocy dla procesorów AMD Zen i Zen2 oraz czujników temperatury dla AMD Ryzen 4000 Renoir. Obsługa pobierania informacji o zużyciu energii poprzez interfejs jest zapewniona dla procesorów AMD Zen i Zen2 RAPL (Limit średniej mocy roboczej).
    • Dodano obsługę formatu modyfikatora NVIDIA do sterownika Nouveau. Dla gv100 zaimplementowano możliwość korzystania z trybów skanowania z przeplotem. Dodano wykrywanie vGPU.
    • Dodano obsługę procesorów graficznych Adreno A405, A640 i A650 do sterownika MSM (Qualcomm).
    • обавлен wewnętrzny framework do zarządzania zasobami DRM (Direct Rendering Manager).
    • Dodano obsługę smartfonów Xiaomi Redmi Note 7 i Samsung Galaxy S2, a także laptopów Elm/Hana Chromebook.
    • Dodano sterowniki do paneli LCD: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Dodano obsługę płyt i platform ARM Renesas „RZ/G1H”, Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMC, Check Point L-50,
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.

    • Dodano obsługę procesora MIPS Loongson-2K (w skrócie Loongson64). Dla CPU Loongson 3 dodano obsługę wirtualizacji za pomocą hypervisora ​​KVM.
    • Dodany
      obsługa rosyjskiego procesora Baikal-T1 i opartego na nim systemu-on-chip BE-T1000. Procesor Baikal-T1 zawiera dwa superskalarne rdzenie P5600 MIPS 32 r5 pracujące z częstotliwością 1.2 GHz. Układ zawiera pamięć podręczną L2 (1 MB), kontroler pamięci DDR3-1600 ECC, 1 port Ethernet 10Gb, 2 porty Ethernet 1Gb, kontroler PCIe Gen.3 x4, 2 porty SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. Procesor zapewnia sprzętową obsługę wirtualizacji, instrukcje SIMD i zintegrowany sprzętowy akcelerator kryptograficzny obsługujący GOST 28147-89. Układ został opracowany przy użyciu bloku rdzenia procesora MIPS32 P5600 Warrior na licencji Imagination Technologies.

Jednocześnie Latynoamerykańska Fundacja Wolnego Oprogramowania uformowany
вариант całkowicie darmowe jądro 5.8 - Linux-libre 5.8-gnu, oczyszczone z elementów oprogramowania sprzętowego i sterowników zawierających niewolne komponenty lub sekcje kodu, których zakres jest ograniczony przez producenta. Nowa wersja wyłącza ładowanie obiektów blob w sterownikach dla Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Enhanced Asynchronous Sample Rate Converter, Maxim Integrated MAX98390 Speaker Aimplifier, Microsemi ZL38060 Connected Home Audio Processor, i urządzenie podrzędne EEPROM I2C. Zaktualizowano kod czyszczenia obiektów blob w procesorach graficznych Adreno, HabanaLabs Goya, ekranie dotykowym x86, sterownikach i podsystemach vt6656 i btbcm.

Źródło: opennet.ru

Dodaj komentarz