Po dvou měsících vývoje Linus Torvalds jádrný release . Mezi nejvýraznější změny patří detektor závodních podmínek KCSAN, univerzální mechanismus doručování uživatelských oznámení, podpora hardwaru pro inline šifrování, rozšířené ochranné mechanismy pro ARM64, podpora ruského procesoru Baikal-T1, možnost odděleného připojení instancí procfs, implementace mechanismů ochrany Shadow Call Stack a BTI pro ARM64.
Kernel 5.8 se stal největším z hlediska počtu změn ze všech kernelů v historii projektu. Změny nejsou spojeny s jedním subsystémem, ale pokrývají různé části jádra a většinou souvisejí s interními přepracováními a úklidem. Nejvíce změn se projevuje v ovladačích. Do nové verze bylo přijato 17606 oprav od 2081 vývojářů, které se dotkly přibližně 20 % všech souborů v repozitáři s kódem jádra. Velikost záplaty je 65 MB (změny se dotkly 16180 souborů, přidáno 1043240 řádků kódu, odstraněno 489854 řádků). Pro srovnání, ve větvi 5.7 bylo provedeno 15033 oprav a velikost záplaty byla 39 MB. Přibližně 37 % všech změn v 5.8 souvisí s ovladači zařízení, asi 16 % změn se týká aktualizace kódu specifického pro hardwarové architektury, 11 % souvisí se síťovým stackem, 3 % s файловými systémy a 4 % s interními subsystémy jádra.
:
- Virtualizace a bezpečnost
- Bylo zajištěno blokování načítání modulů jádra, které mají sekce s kódem, v nichž jsou současně nastaveny bity povolující provádění a zápis. Změna byla realizována v rámci většího projektu na zbavení jádra používání paměťových stránek, které umožňují současné provádění a zápis.
- Objevila se možnost vytváření samostatných instancí procfs, které umožňují používat několik bodů připojení procfs namontovaných s různými možnostmi, ale odrážejících jedno jmenný prostor identifikátorů procesů (pid namespace). Dříve všechny body připojení procfs pouze zrcadlily jedno vnitřní zastoupení a jakákoliv změna parametrů připojení se projevila na všech ostatních bodech připojení přidružených ke stejnému jmennému prostoru identifikátorů procesů. Mezi oblastmi, ve kterých může být požadováno připojení s různými možnostmi, je realizace lehké izolace pro vestavěné systémy s možností skrytí určitých typů procesů a informačních uzlů v procfs.
- Pro platformu ARM64 byla implementována podpora mechanismu
, poskytovaného kompilátorem Clang pro ochranu před přepsáním adresy návratu z funkce v případě přetečení vyrovnávací paměti na zásobníku. Podstata ochrany spočívá v uchování adresy návratu do samostatného „stínového“ zásobníku po předání řízení funkci a jejím získání před opuštěním funkce. - Pro platformu ARM64 byla přidána podpora instrukcí (Branch Target Indicator) pro ochranu vykonávání sad instrukcí, na které by se nemělo provádět skoky při větvení. Blokování skoků na libovolné úseky kódu bylo realizováno k zamezení vytváření gadgetů v exploitech, využívajících techniky návratového orientovaného programování (ROP — Return-Oriented Programming, útočník se nesnaží umístit svůj kód do paměti, ale operuje již existujícími kusy strojových instrukcí, které končí instrukcí návratu řízení, z nichž se skládá řetězec volání pro získání požadované funkcionality).
- Byla přidána podpora hardwaru pro inline-šifrování blokových zařízení (). Zařízení inline-šifrování jsou obvykle zabudována do úložiště, ale logicky se nachází mezi systémovou pamětí a diskem, provádějící průhledné šifrování a dešifrování vstupu/výstupu na základě klíčů a algoritmu šifrování zadaného jádrem.
- Byl přidán parametr příkazového řádku jádra „initrdmem“, který umožňuje určit fyzickou adresu umístění initrd v paměti při umístění počátečního spouštěcího obrazu do RAM.
- Byly přidány nové capability: CAP_PERFMON pro přístup k subsystému perf a provádění monitorování výkonu. , umožňující provádět některé operace s BPF (například načítání BPF programů), které dříve vyžadovaly oprávnění CAP_SYS_ADMIN (nyní jsou pravomoci CAP_SYS_ADMIN rozděleny na kombinaci CAP_BPF, CAP_PERFMON a CAP_NET_ADMIN).
- nové zařízení virtio-mem, které umožňuje realizaci horkého připojení a odpojení paměti k hostitelským systémům.
- Bylo implementováno zrušení operací mapování v /dev/mem, pokud ovladač zařízení používá překrývající se oblasti paměti.
- Byla přidána ochrana proti zranitelnosti , které umožňuje obnovit výsledky provádění některých instrukcí prováděných na jiném jádru CPU.
- Paměť a systémové služby
- Do dokumentu, který stanoví pravidla pro formátování kódu, byly přidány doporučení pro používání inkluzivní terminologie. Vývojářům se nedoporučuje používat výrazy ‘master/slave’ a ‘blacklist/whitelist’, a také samotné slovo ‘slave’. Doporučení se týkají pouze nového použití těchto termínů. Již existující zmínky o uvedených slovech v jádru zůstanou nedotčeny. V novém kódu je používání označených termínů povoleno, pokud to vyžaduje zachování uživatelského API a ABI, a také při aktualizaci kódu pro podporu existujícího hardwaru nebo protokolů, jejichž specifikace předepisují použití určitých termínů.
- Byl zahrnut ladicí nástroj (Kernel Concurrency Sanitizer), určený pro dynamické odhalování uvnitř jádra. Použití KCSAN je podporováno při kompilaci v GCC a Clang a vyžaduje přidání speciálních modifikací ve fázi kompilace pro sledování přístupu k paměti (používají se breakpointy, které se spouštějí při čtení nebo změně paměti). Hlavní důraz při vývoji KCSAN byl kladen na prevenci falešných pozitiv, škálovatelnost a jednoduchost použití.
- Přidáno doručování notifikací z jádra do uživatelského prostoru. Mechanismus je založen na standardním ovladači pipe a efektivně rozděluje notifikace z jádra přes kanály otevřené v uživatelském prostoru. Bod přijetí notifikací představují pipe, které byly otevřeny ve speciálním režimu a umožňují akumulaci zpráv z jádra v kruhovém bufferu. Čtení probíhá pomocí běžné funkce read(). Vlastník kanálu určuje, které zdroje v jádře je třeba sledovat a může definovat filtr pro ignorování zpráv a událostí určitého typu. Zatím jsou podporovány pouze operace se klíči, jako je přidání/odebrání klíčů a změna jejich atributů. Tyto události plánují využít v GNOME.
- Pokračuje rozvoj funkčnosti 'pidfd', která pomáhá zpracovávat situace s opětovným použitím PID (pidfd se váže ke konkrétnímu procesu a nezmění se, zatímco PID může být přidělen jinému procesu po ukončení aktuálního procesu spojeného s tímto PID). V nové verzi byla přidána podpora použití pidfd pro přiřazení procesu k jmenným prostorům (je povoleno zadání pidfd při vykonávání systémového volání setns). Použití pidfd umožňuje jedním voláním řídit přiřazení procesu k několika typům jmenných prostorů, čímž se podstatně zkracuje počet potřebných systémových volání a realizuje se přiřazení v atomárním režimu (pokud při přiřazení k jednomu z jmenných prostorů dojde k chybě, nebudou připojeny ani další).
- Byla přidána nová systémová volání faccessat2(), která se liší od
dalším argumentem s příznaky, které odpovídají doporučením POSIX (dříve byly tyto příznaky emulovány v knihovně C, zatímco nový faccessat2 umožňuje jejich implementaci v jádře). - V Cgroup nastavení memory.swap.high, které lze využít k zpomalení úloh zabírajících příliš mnoho místa v oblasti swapu.
- Do rozhraní asynchronního vstupu/výstupu byla přidána podpora systémového volání tee().
- Byl přidán mechanismus „, určený k výstupu do uživatelského prostoru obsahu struktur jádra.
- možnost použití kruhového bufferu pro výměnu dat mezi BPF programy.
- V mechanismu , určený k zajištění paralelního vykonávání úloh v jádru, byla přidána podpora pro vícero vláknové úlohy s vyvažováním zátěže.
- Do mechanismu pstore, který umožňuje uchování ladicí informace o příčině havárie v oblasti paměti, která není ztracena mezi restartováními, backend pro ukládání informací na blokových zařízeních.
- Z větve jádra PREEMPT_RT realizace lokálních zámků.
- nové API pro alokaci bufferů (AF_XDP), zaměřené na zjednodušení psaní síťových ovladačů s podporou XDP (eXpress Data Path).
- Pro architekturu RISC-V byla realizována podpora ladění komponent jádra pomocí KGDB.
- Před vydáním 4.8 byly zvýšeny požadavky na verzi GCC, která může být použita pro sestavení jádra. V jednom z následujících vydání se plánuje zvýšení limitu na GCC 4.9.
- Diskový subsystém, vstup/výstup a souborové systémy
- V Device Mapper nový zpracovatel dm-ebs (emulate block size), který může být použit pro emulaci menší velikosti logického bloku (např. pro emulaci 512-bytových sektorů na discích s velikostí sektoru 4K).
- V souborovém systému F2FS byla přidána podpora komprese pomocí algoritmu LZO-RLE.
- V dm-crypt podpora šifrovaných klíčů.
- V Btrfs bylo zlepšeno zpracování operací čtení v režimu přímého vstupu/výstupu. Při montování kontrola vzdálených podřízených a adresářů, které zůstaly bez rodiče.
- V CIFS byla přidána volba „nodelete“, která umožňuje standardní kontroly práv na serveru, ale zakazuje klientovi mazat soubory nebo adresáře.
- Ve Ext4 bylo zlepšeno zpracování chyby při použití vícero vlákna. V xattr byla přidána podpora pro prostor názvů gnu.*, který se používá v GNU Hurd.
- Pro Ext4 a XFS byla zahrnuta podpora operací DAX (přímý přístup k FS obchází stránkovou cache bez použití úrovně blokových zařízení) vázaných na jednotlivé soubory a adresáře.
- Do systémového volání byla přidána možnost , při jehož použití se informace získávají pomocí mechanismu DAX.
- V EXFAT podpora verifikace spouštěcí oblasti.
- Ve FAT předběžné načítání prvků FS. Testování pomalého 2TB USB jednotky ukázalo zkrácení doby zkoušky z 383 na 51 sek.
- Síťová subsystém
- V kodexu pro řízení práce síťových mostů podpora protokolu (Media Redundancy Protocol), který zajišťuje odolnost proti selhání, uzavřením několika Ethernetových přepínačů do smyčky.
- Do systému řízení provozu (Tc) nová akce „gate“, která umožňuje určit časové intervaly pro zpracování a odmítnutí určitých paketů.
- Do jádra a utilitě ethtool byla přidána podpora funkcí testování připojeného síťového kabelu a sebediagnostičky síťových zařízení.
- Do IPv6 zásobníku byla přidána podpora algoritmu MPLS (Multiprotocol Label Switching) pro směrování paketů s použitím vícetopologové přepínání podle značek (podpora MPLS pro IPv4 byla již dříve).
- Byla přidána podpora přenosu paketů IKE (Internet Key Exchange) a IPSec přes TCP () pro obcházení možných blokací UDP.
- síťové blokové zařízení rnbd, které umožňuje organizovat vzdálený přístup k blokovému zařízení pomocí transportu RDMA (InfiniBand, RoCE, iWARP) a protokolu RTRS.
- Ve TCP zásobníku podpora komprese rozsahů v odpovědích na výběrové potvrzení (selective acknowledgment, SACK).
- Pro IPv6 podpora TCP-LD (, dlouhé přerušení konektivity).
- Hardware
- V DRM ovladači i915 pro grafické karty Intel byla ve výchozím nastavení zahrnuta podpora čipů Intel Tiger Lake (GEN12), pro které byla také možnost použití systému SAGV (System Agent Geyserville) pro dynamické přizpůsobení frekvence a napětí v závislosti na požadavcích na spotřebu energie nebo výkon.
- V ovladači amdgpu byla přidána podpora pixelového formátu FP16 a byla realizována možnost práce s šifrovanými buffery ve video paměti (TMZ, Trusted Memory Zone).
- Byla přidána podpora senzorů spotřeby energie procesorů AMD Zen a Zen2, stejně jako senzorů teploty AMD Ryzen 4000 Renoir. Pro AMD Zen a Zen2 byla zajištěna podpora získávání informací o spotřebě energie prostřednictvím rozhraní (Running Average Power Limit).
- V ovladači Nouveau byla přidána podpora formátu modifikátorů NVIDIA. Pro gv100 byla realizována možnost použití prokládaného režimu zobrazení. Bylo přidáno určení vGPU.
- V ovladači MSM (Qualcomm) byla přidána podpora GPU Adreno A405, A640 a A650.
- interní framework pro správu zdrojů DRM (Direct Rendering Manager).
- Byla přidána podpora chytrých telefonů Xiaomi Redmi Note 7 a Samsung Galaxy S2, stejně jako notebooků Elm/Hana Chromebook.
- Byly přidány ovladače pro LCD panely: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
- Byla přidána podpora ARM platforem a platforem 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. - Byla přidána podpora procesorů MIPS Loongson-2K (zkráceně Loongson64). Pro CPU Loongson 3 byla přidána podpora virtualizace pomocí hypervisoru KVM.
-
podpora ruského procesoru Baikal-T1 a na něm založeného systému na čipu . Procesor Baikal-T1 obsahuje dvě superskalární jádra P5600 MIPS 32 r5, pracující na frekvenci 1,2 GHz. Čip obsahuje L2 cache (1 MB), řadič paměti DDR3-1600 ECC, 1 port 10Gb Ethernet, 2 porty 1Gb Ethernet, řadič PCIe Gen.3 x4, 2 porty SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. Procesor poskytuje hardwarovou podporu virtualizace, SIMD instrukce a integrovaný hardwarový akcelerátor kryptografických operací, který podporuje GOST 28147-89. Čip byl navržen s využitím licencované architektury jádra MIPS32 P5600 Warrior od společnosti Imagination Technologies.
Zároveň latinskoamerická Nadace svobodného softwaru
varianta — , vyčištěného od prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo kódy, jejichž užívání je omezeno výrobcem. V nové verzi byla zakázána načítání blobů v ovladačích pro 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 Amplifier, Microsemi ZL38060 Connected Home Audio Processor a I2C EEPROM Slave. Byl aktualizován kód na čištění blobů v ovladačích a subsystémech Adreno GPU, HabanaLabs Goya, x86 touchscreen, vt6656 a btbcm.
Zdroj: opennet.ru
