Két hónap fejlesztés után Linus Torvalds bemutatta a Linux 5.11 kernel kiadását. A legfigyelemreméltóbb változások között szerepel az Intel SGX enclave-ek támogatása, új rendszerhívás-elfogási mechanizmus, auxiliary virtuális busz, a MODULE_LICENSE() nélküli modulok fordításának tilalma, a gyors rendszerhívás-szűrés mód a seccomp-ban, az ia64 architektúra támogatásának megszüntetése, a WiMAX technológia áthelyezése a „staging” ágba, valamint az SCTP UDP-ben történő kapszulázásának lehetősége.
Az új verzió 15480 javítást tartalmaz 1991 fejlesztőtől, a patch mérete 72 MB (a változások 12090 fájlt érintenek, 868025 kódsor van hozzáadva, 261456 kódsort töröltek). A 5.11-es verzióban bemutatott változások körülbelül 46%-a eszközmeghajtókkal kapcsolatos, körülbelül 16%-a hardverarchitektúrára specifikus kód frissítésével kapcsolatos, 13%-a a hálózati veremhez, 3%-a fájlrendszerekhez, és 4%-a a kernel belső alrendszereihez.
Főbb újítások:
- Lemezszubszisztéma, bemenet/kipontozás és fájlrendszerek
- A Btrfs-hez több új csatolási opció került hozzáadásra, amelyeket sérült fájlrendszerből való adatok visszaállításakor alkalmazhatunk: a „rescue=ignorebadroots” lehetővé teszi a csatolást, még akkor is, ha egyes gyökérfák sérültek (extent, uuid, data reloc, device, csum, free space), a „rescue=ignoredatacsums” lekapcsolja az adatellenőrző összegek ellenőrzését, és a „rescue=all” egyszerre aktiválja az 'ignorebadroots', 'ignoredatacsums' és 'nologreplay' módokat. A „inode_cache” csatolási opció már nem támogatott, mivel korábban elavultnak nyilvánították. A kód előkészítése megtörtént a kisebb, mint egy lap (PAGE_SIZE) méretű meta- és adatblokkok támogatásának megvalósításához, valamint a zónázott helyelosztási mód támogatásához. A bufferelés nélküli (Direct IO) kéréseket az iomap infrastruktúrára térték át. Számos művelet teljesítményét optimalizálták, egyes esetekben a sebességnövekedés akár több tized százalékot is elérhet.
- Az XFS rendszerében megvalósították a „needsrepair” jelzőt, amely a helyreállítás szükségességét jelzi. E jelző beállítása után a fájlrendszert nem lehet csatolni, amíg a jelzőt az xfs_repair eszköz nem törli.
- Az Ext4 csupán hibajavításokat és optimalizációkat javasolt, valamint kódmegtisztítást végeztek.
- Megengedett a NFS felett csatolt fájlrendszerek ismételt exportálása (azaz, a NFS-en keresztül csatolt megosztást most NFS-en keresztül is exportálhatunk és közbenső cache-ként használhatjuk).
- A close_range() rendszerhívás lehetővé teszi a folyamat számára, hogy egyszerre zárjon be egy egész tartományt a nyitott fájlleírók közül, és hozzáadott egy CLOSE_RANGE_CLOEXEC opciót a fájlleírók close-on-exec üzemmódban való bezárásához.
- Az F2FS fájlrendszerben új ioctl() hívások kerültek bevezetésre, amelyek lehetővé teszik a felhasználói térből a tömörített formában tárolt fájlok kezelését. Bevezették a «compress_mode=» mount opciót, amely lehetővé teszi a tömörítési vezérlő elhelyezésének kiválasztását a kernel vagy a felhasználói tér oldalán.
- Lehetővé vált az Overlayfs nem privilegizált folyamatok általi csatlakoztatása, külön felhasználói azonosítók (user namespace) használatával. A biztonsági modell megvalósításának megfelelőségének ellenőrzésére teljes kódellenőrzést végeztek. Az Overlayfs-hez hozzáadták a fájlrendszer-képek másolatainak használatát, lehetővé téve az UUID-ellenőrzés letiltását.
- A Ceph fájlrendszerhez hozzáadódott az msgr2.1 protokoll támogatása, amely lehetővé teszi az AES-GCM algoritmus alkalmazását az adatok titkosított továbbításakor.
- A dm-multipath modulban bevezették a CPU-hoz való kötődés («IO affinity») figyelembevételét a bemeneti/kimeneti kérések útvonalának kiválasztásakor.
- Memória és rendszerszolgáltatások
- Új rendszerhívás-elfogó mechanizmus került bevezetésre, amely a prctl() alapjaira épül, és lehetővé teszi a felhasználói térből a kivételek generálását egy adott rendszerhívásra történő hivatkozáskor és annak végrehajtásának emulációját. E funkció iránti kereslet a Wine-ben és a Protonban tapasztalható, mivel szükséges a Windows rendszerhívásainak emulálása, amely szükséges a játékok és programok kompatibilitásának biztosításához, amelyek közvetlenül hajtják végre a rendszerhívásokat a Windows API megkerülésével (például a jogosulatlan használat megakadályozása érdekében).
- A userfaultfd() rendszerhíváshoz, amely a felhasználói térben történő page faultok feldolgozására szolgál, lehetővé vált a kernel szintjén keletkező kivételek kezelésének letiltása, hogy megnehezítsük egyes sebezhetőségek kiaknázását.
- A BPF alrendszerhez hozzáadódott a feladat-specifikus adattárolás (task-local storage) támogatása, amely a konkrét BPF- feldolgozóhoz köti az adatokat.
- Teljesen átdolgozásra került a BPF által végzett memóriahasználat-nyomon követés — a memlock rlimit kezelés helyett BPF objektumok memóriahasználatának irányítására cgroup kontroller javasolt.
- A BTF (BPF Type Format) mechanizmusban, amely a BPF pszeudokód típusellenőrzéséhez nyújt információt, megvalósult a kernel modulok támogatása.
- Az io_uring aszinkron bemenet/kimenet interfészhez hozzáadódott a shutdown(), renameat2() és unlinkat() rendszerhívások támogatása. Az io_uring_enter() hívásakor lehetőség nyílik időzítő megadására (az időzítő argumentum támogatásának ellenőrzését az IORING_FEAT_EXT_ARG zászló segítségével lehet elvégezni).
- Az ia64 architektúra, amelyet az Intel Itanium processzorok használnak, az elhanyagolt kategóriába került, ami a tesztelés leállítását jelenti. A Hewlett Packard Enterprise leállította az új Itanium hardverek megrendelését, míg az Intel ezt már tavaly megtette.
- Megszűnt a MicroBlaze architektúrára épülő rendszerek támogatása, amelyek nem rendelkeznek memóriakezelő blokkal (MMU). Ilyen rendszerek már régóta nem kerülnek előtérbe.
- A MIPS architektúrához hozzáadódott a kódlefedettség-tesztelés támogatása a gcov segédprogram segítségével.
- Új támogatás került bevezetésre az auxiliary virtuális buszhoz, amely lehetővé teszi a többfunkciós eszközökkel való interakciót, amelyek funkciókat igényelnek, különböző meghajtókat igényelve (például Ethernet és RDMA támogatású hálózati kártyák). A busz használható egy eszköz elsődleges és másodlagos meghajtójának kijelölésére abban az esetben, ha problémás a MFD (Multi-Function Devices) alrendszer használata.
- A RISC-V architektúrához bevezetésre került a CMA (Contiguous Memory Allocator) memóriaelosztó rendszer támogatása, amely optimalizálva van nagy, folytonos memória területek kiosztására memóriaoldalak mozgatásának technikájával. A RISC-V esetén eszközök korlátozott hozzáférésének és az interrupt feldolgozási idő nyilvántartásának eszközei is megvalósításra kerültek.
- A 32 bites ARM rendszerekhez hozzáadódott a KASan (Kernel Address Sanitizer) hibakereső eszköz támogatása, amely a memóriahasználat hibáinak felderítését biztosítja. A 64 bites ARM rendszerek KASan implementációja MTE (MemTag) címkék használatára lett átváltva.
- Hozzáadódott az epoll_pwait2() rendszerhívás, amely lehetővé teszi a nanomásodperces pontosságú időzítők használatát (az epoll_wait hívás milliós pontossággal manipulál).
- A rendszer összeállításában biztosítva van a hiba megjelenítése, ha a kernel szálak betöltésére tett kísérlet során a MODULE_LICENSE() makróval nem került meghatározásra a kód licencje. A fordítási hiba ezentúl a EXPORT_SYMBOL() makró statikus függvényekhez való használata miatt is bekövetkezik.
- Hozzáadva a GEM-objektumok térképezésének támogatása a bemenetre/kimenetre szánt memóriából, amely felgyorsította a framebufferrel való munkát bizonyos architektúrákon.
- A Kconfig-ban megszűnt a Qt4 támogatása (a Qt5, GTK és Ncurses támogatása megmaradt).
- Virtualizáció és biztonság
- A seccomp() rendszerhíváshoz hozzáadva a gyors reakció üzemmód támogatása, amely lehetővé teszi, hogy nagyon gyorsan meghatározzuk, hogy egy adott rendszerhívás engedélyezett vagy tiltott a folyamathoz csatlakoztatott jogosultsági táblázat (constant-action bitmap) alapján, amely nem igényel BPF-kezelő futtatást.
- Integrálva lettek a kernel komponensek az Intel SGX (Software Guard eXtensions) technológia alapú enclávék létrehozásához és kezeléséhez, amely lehetővé teszi az alkalmazások számára, hogy kódot elkülönített titkosított memória területekben futtassanak, amelyekhez a rendszer többi része hozzáférése korlátozott.
- A felhasználói térből a MSR (model-specific register) regiszterekhez való hozzáférés korlátozása keretében tilos a MSR_IA32_ENERGY_PERF_BIAS regiszterbe való írás, amely lehetővé teszi a processzor energiahatékonysági üzemmódjának megváltoztatását (‘normal’, ‘performance’, ‘powersave’).
- A kernel-rt ágból átkerült a magas prioritású folyamatok CPU közötti migrációjának letiltásának lehetősége a valós idejű rendszerekhez.
- ARM64 rendszerekhez hozzáadva a MTE (MemTag, Memory Tagging Extension) címkék alkalmazásának lehetősége a jelzők memóriacímekhez. Az MTE használata az SA_EXPOSE_TAGBITS opció megadásával aktiválható a sigaction() során, és lehetővé teszi a pointerek használatának helyességének ellenőrzését, hogy megakadályozzuk a már felszabadított memóriablokkokhoz való hozzáférésből, puffer túlcsordulásból, inicializálás előtti hozzáférésekből és a jelen kontextuson kívüli használatból eredő sebezhetőségek kihasználását.
- Hozzáadva a 'DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING' paraméter, amely lehetővé teszi a dm-verity alrendszer számára, hogy ellenőrizze a másodlagos kulcstárolóban (keyring) elhelyezett tanúsítványok hash-aláírásait. A beállítás lehetővé teszi a magban beépített tanúsítványok, valamint a működés közben betöltött tanúsítványok ellenőrzését, ami lehetővé teszi a tanúsítványok frissítését a kernel teljes frissítése nélkül.
- A User-mode Linux-ben hozzáadták a suspend-to-idle mód támogatását, amely lehetővé teszi a környezet felfüggesztését és a SIGUSR1 jel használatát az alvásból való kilépéshez.
- A virtuális gépekhez memória forró csatlakoztatását és leválasztását lehetővé tevő virtio-mem mechanizmushoz hozzáadták a Big Block Mode (BBM) támogatását, amely lehetővé teszi a memória blokkok átvitelét vagy elvételét, amelyek meghaladják a kernel memória blokk méretét, ami szükséges a VFIO optimalizálásához a QEMU-ban.
- A kernel szintű TLS megvalósításához hozzáadták a CHACHA20-POLY1305 titkosító támogatását.
- Hálózati alrendszer
- Az 802.1Q (VLAN) esetében megvalósították a Connectivity Fault Management (CFM) mechanizmust, amely lehetővé teszi a csatlakozási hibák azonosítását, ellenőrzését és izolálását virtuális hídhálózatokban. Például a CFM használható problémák lokalizálására olyan hálózatokban, amelyek több független szervezetet ölelnek fel, amelyek munkatársai csak saját berendezéseikhez férhetnek hozzá.
- Hozzáadták az SCTP protokoll csomagok UDP csomagokba való kapszulázásának támogatását (RFC 6951), ami lehetővé teszi az SCTP használatát olyan hálózatokban, ahol régi címfordítók vannak, amelyek közvetlenül nem támogatják az SCTP-t, és az SCTP implementációját olyan rendszereken, amelyek nem biztosítanak közvetlen hozzáférést az IP szinthez.
- A WiMAX technológia megvalósítását a stagingbe helyezték, és a jövőben törlésre kerül, hacsak nem találnak olyan felhasználókat, akiknek szüksége van a WiMAX-ra. A WiMAX már nem használatos nyilvános hálózatokban, és a kernelben az egyetlen illeszti, amelyet a WiMAX használatára lehet alkalmazni, a régi Intel 2400m illesztőprogram. A NetworkManager hálózati konfigurálójában a WiMAX támogatása 2015-ben megszűnt. Jelenleg a WiMAX-ot szinte teljesen felváltották az LTE, HSPA+ és Wi-Fi 802.11n technológiák.
- A bejövő TCP-forgalom feldolgozásának teljesítményoptimalizálásán dolgoztak a zerocopy módban, azaz további másolás nélkül új pufferekbe. Közepes méretű forgalom esetén, amely tíz vagy több száz kilobájtot tartalmaz, a zerocopy alkalmazása a recvmsg() helyett lényegesen hatékonyabb. Például a végrehajtott módosítások 60-70%-kal javították a zerocopy használatával történő RPC jellegű forgalom feldolgozásának hatékonyságát 32 KB üzenetek esetén.
- Új ioctl() hívások kerültek bevezetésre a több PPP-csatornát átölelő hálózati hídban. A javasolt funkció lehetővé teszi, hogy az elsődleges adatok egyik csatornából a másikba mozogjanak, például PPPoE-ből a PPPoL2TP munkamenetbe.
- Folyamatban van az MPTCP (MultiPath TCP) kernelbe való integráció, a TCP protokoll kiterjesztése, amely lehetővé teszi a TCP-kapcsolat működését, ahol a csomagok egyszerre több útvonalon érkeznek különböző hálózati interfészeken, amelyek eltérő IP-címekhez vannak rendelve. Az új kiadásban megvalósult az ADD_ADDR opció támogatása a rendelkezésre álló kapcsolatokról való bejelentéshez, IP-címek amikor új áramlatokat adunk hozzá a meglévő MPTCP kapcsolathoz.
- Bevezetésre került a kapcsolataink pollezésének (busy-polling) büdzséjének túllépésére vonatkozó cselekvések beállításának lehetősége. Az eddig elérhető SO_BUSY_POLL mód azt jelentette, hogy budget kimerülése esetén áttérünk softirq üzemmódra. Azoknak az alkalmazásoknak, amelyeknek továbbra is szükségük van a pollezésre, új SO_PREFER_BUSY_POLL opció javasolt.
- IPv6-ban megvalósították az SRv6 End.DT4 és End.DT6 módok támogatását, amelyeket többfelhasználós IPv4 L3 létrehozásához alkalmaznak. VPN és VRF (Virtual Routing and Forwarding) eszközökhöz.
- A Netfilterben egységesítették a set kifejezések megvalósítását, lehetővé téve, hogy több kifejezést adjanak meg minden egyes set-lista elemhez.
- A 802.11 vezeték nélküli veremben API-kat vezettek be a SAR teljesítménykorlátozások és az AE PWE, valamint HE MCS paraméterek beállításához. Az Intel iwlwifi illesztőprogramhoz hozzáadták a 6GHz (Ultra High Band) tartomány támogatását. A Qualcomm Ath11k illesztőprogramhoz hozzáadták a FILS (Fast Initial Link Setup, az IEEE 802.11ai standard szerint) csatlakozási technológia támogatását, amely csökkenti a késleltetéseket a roaming során, amikor az egyik hozzáférési pontról a másikra migrálunk.
- Hardver
- Az amdgpu illesztőprogramban megvalósították az AMD «Green Sardine» (Ryzen 5000) APU és a «Dimgrey Cavefish» (Navi 2) GPU támogatását, valamint kezdeti támogatást nyújtottak az APU AMD Van Gogh-hoz, amely Zen 2 magot és RDNA 2 (Navi 2) GPU-t tartalmaz. Új APU Renoir azonosítók támogatásával bővült (Zen 2 CPU és Vega GPU alapú).
- Az i915-ös meghajtóban az Intel grafikus kártyákhoz implementálták az IS (Integer scaling) technológia támogatását, amely a szomszédos pixelek állapotának figyelembevételével, a legközelebbi szomszédos interpolációs eljárással határozza meg a hiányzó pixelek színét. Bővült az Intel DG1 diszkrét grafikus kártyák támogatása is. Implementálták a „Big Joiner” technológiát, amely a Ice Lake / Gen11 chipektől kezdődően érhető el, lehetővé téve egy transcoder használatát két stream feldolgozására, például 8K kijelzőre való kimenet esetén egy DisplayPorton keresztül. Bevezetésre került az aszinkron váltási mód is, amely két puffer között a videomemóriában (async flip).
- A nouveau meghajtóba bekerült a kezdeti támogatás az NVIDIA Ampere architektúrájára épülő GPU-khoz (GA100, GeForce RTX 30xx), amely egyelőre a videomódok kezelésére korlátozódik.
- Bővítették a 3WIRE protokoll támogatását, amelyet LCD panelekben használnak. Támogatást kaptak a novatek nt36672a, TDO tl070wsh30, Innolux N125HCE-GN1 és ABT Y030XX067A 3.0 panelek is. Kiemelhető a OnePlus 6 és 6T okostelefonok paneljének támogatása, amely lehetővé tette a nem módosított kernelre történő indítást az eszközökön.
- Elérhetővé vált az első diszkrét USB4 host vezérlő Intel Maple Ridge támogatása.
- Támogatást kaptak az Allwinner H6 I2S, Analog Devices ADAU1372, Intel Alderlake-S, GMediatek MT8192, NXP i.MX HDMI és XCVR, Realtek RT715 és Qualcomm SM8250 hangkóderek.
- Hozzáadták az ARM platformok, eszközök és platformok támogatását: Galaxy Note 10.1, Microsoft Lumia 950 XL, NanoPi R1, FriendlyArm ZeroPi, Elimo Initium SBC, Broadcom BCM4908, Mediatek MT8192/MT6779/MT8167, MStar Infinity2M, Nuvoton NPCM730, Marvell Armada 382, Mikrotik Marvell Prestera 98DX3236 alapú, Nuvoton NPCM750 BMC-vel rendelkező szerverek, Kontron i.MX8M Mini, Espressobin Ultra, „Trogdor” Chromebook, Kobol Helios64, Engicam PX30.Core.
- Beépített támogatás került a NVIDIA Tegra 3-on alapuló Ouya játékkonzolhoz.
Közben a latin-amerikai Szabad Szoftver Alapítvány létrehozta a teljesen szabad 5.11-es kernel változatot — a Linux-libre 5.11-gnu-t, amelyet megtisztítottak a gyártó által korlátozott szabad komponenst vagy kódot tartalmazó firmware-ektől és driverektől. Az új kiadásban megtisztították a drivereket az qat_4xxx (crypto), lt9611uxcm (dsi/hdmi bridge), ccs/smia++ (sensor), ath11k_pci, nxp audio transceiver és mhi pci controller esetén. Frissült a blobok megtisztításáért felelős kód az amdgpu, btqca, btrtl, btusb, i915 csr driverekben és alrendszerekben. Kikapcsolták az új blobokat az m3 rproc, idt82p33 ptp clock és qualcomm arm64 esetén.
Forrás: opennet.ru
