Két hónapos fejlesztés után Linus Torvalds bemutatta a Linux 5.18 kernel kiadását. Az egyik legszembetűnőbb változás: jelentős takarítást végeztek elavult funkciókon, a Reiserfs fájlrendszert elavultnak nyilvánították, felhasználói folyamatok nyomkövetési eseményei lettek bevezetve, támogatást kaptak az Intel IBT exploitok működésének blokkolására, újra lehetőség nyílt a buffer túlcsordulásának észlelésére a memcpy() függvény használata során, fprobe funkcióhívások nyomkövetési mechanizmusát bevezették, a CPU AMD Zen ütemező teljesítménye javult, a vezérlőbe integrálva lett az Intel CPU (SDS) működéséért felelős illesztőprogram, valamint integráltak néhány javítást a fejlécfájlok átszervezéséhez, jóváhagyták a C11 szabvány alkalmazását.
Az új verzióban 16206 javítást fogadtak el 2127 fejlesztőtől (az előző kiadásban 14203 javítás volt 1995 fejlesztőtől), a patch mérete 108 MB (a módosítások 14235 fájlt érintettek, 1340982 kódot adtak hozzá, és 593836 sort töröltek). A 5.18-as verzióban szereplő összes változás körülbelül 44%-a eszközillesztőkhöz kapcsolódik, körülbelül 16% a hardverarchitektúrákhoz specifikus kód frissítésével foglalkozik, 11% a hálózati stackkel, 3% a fájlrendszerekkel és 3% a kernel belső alrendszereivel kapcsolatos.
Az 5.18 kernel fő újításai:
- Lemezszubszisztéma, bemenet/kipontozás és fájlrendszerek
- A Btrfs fájlrendszerben bevezették a tömörített adatok átkonvertálásának támogatását a send és receive műveletek során. Korábban a send/receive használatakor az elküldő fél kicsomagolta a tömörített formában tárolt adatokat, míg a fogadó fél újra tömörítette az írás előtt. Az 5.18 kernelben a felhasználói térben működő alkalmazások, amelyek send/receive hívásokat használnak, lehetőséget kaptak a tömörített adatok átkonvertálás nélküli továbbítására. E funkciót az új ioctl műveletek, a BTRFS_IOC_ENCODED_READ és BTRFS_IOC_ENCODED_WRITE révén valósították meg, amelyek lehetővé teszik az információk közvetlen olvasását és írását az extentsbe.
Továbbá a Btrfs-ben javították az fsync teljesítményét. Bevezették a deduplikálás és a reflink végrehajtásának lehetőségét (fájlmetadatok klónozása olyan referencia létrehozásával, amely már létező adatokat használ másolás nélkül) az egész tárolóra, nem korlátozva a csatolt pontokra.
- A közvetlen belépési/műveleti (Direct I/O) módban lehetőség van a titkosított fájlok elérésére az fscrypt inline titkosításának használatával, amelyben a titkosítási és visszafejtési műveleteket a tárolóvezérlő végzi, nem a kernel. A szokásos kernel általi titkosítás esetén a Direct I/O-n keresztüli hozzáférés a titkosított fájlokhoz, mint korábban, nem lehetséges, mivel a fájlokhoz való hozzáférés a kernel pufferezési mechanizmusát megkerülve történik.
- Az NFS-szerverben alapértelmezés szerint engedélyezve van az NFSv3 protokoll támogatása, amelyet most már nem szükséges külön aktiválni, és az NFS általános engedélyezésével érhető el. Az NFSv3 az alapértelmezett és mindig támogatott NFS verzióként van számon tartva, míg az NFSv2 támogatását a jövőben lehetséges, hogy megszüntetik. Jelentősen növelték a könyvtár tartalmának olvasásának hatékonyságát.
- A ReiserFS fájlrendszer lejárt státuszra került, és 2025-re várható a törlése. A ReiserFS elavult státuszra való átállítása csökkenti a különböző fájlrendszerek közötti közös API támogatással kapcsolatos karbantartási munkát, amely a mountolás, iomap és kötetek támogatásával kapcsolatos.
- Az F2FS fájlrendszerhez megvalósították a felhasználói azonosítók mappolt fájlrendszereken történő mappolásának lehetőségét, amely a meghatározott felhasználó fájljainak párosítására szolgál a csatolt idegen partíción a jelenlegi rendszer más felhasználójával.
- A Device-mapper kezelők statisztikai számítási kódja át lett dolgozva, ami lehetővé tette a pontosabb elszámolást az olyan kezelőkben, mint a dm-crypt.
- NVMe eszközök számára 64 bites ellenőrzőösszegek támogatását valósították meg az integritás ellenőrzésére.
- Az exfat fájlrendszerhez új csatolási opciót javasoltak „keep_last_dots”, amely megakadályozza a fájl neve végén található pontok törlését (Windows alatt alapértelmezés szerint a neve végén lévő pontok törlésre kerülnek).
- Az EXT4 fájlrendszer teljesítménye javult a fast_commit módban, és a skálázhatóság is megnövekedett. A „mb_optimize_scan” mappolási opció, amely a fájlrendszer nagy töredezettsége esetén növeli a teljesítményt, a könyvhegyekkel rendelkező fájlokkal való munkára lett optimalizálva.
- A write stream support has been discontinued in the subsystem that facilitates the operation of block devices. This feature was proposed for SSDs but did not gain traction, and currently, there are no devices supporting this mode, making it unlikely that they will appear in the future.
- A Btrfs fájlrendszerben bevezették a tömörített adatok átkonvertálásának támogatását a send és receive műveletek során. Korábban a send/receive használatakor az elküldő fél kicsomagolta a tömörített formában tárolt adatokat, míg a fogadó fél újra tömörítette az írás előtt. Az 5.18 kernelben a felhasználói térben működő alkalmazások, amelyek send/receive hívásokat használnak, lehetőséget kaptak a tömörített adatok átkonvertálás nélküli továbbítására. E funkciót az új ioctl műveletek, a BTRFS_IOC_ENCODED_READ és BTRFS_IOC_ENCODED_WRITE révén valósították meg, amelyek lehetővé teszik az információk közvetlen olvasását és írását az extentsbe.
- Memória és rendszerszolgáltatások
- The integration of a patch set has begun, allowing for a significant reduction in kernel rebuild time through the restructuring of header file hierarchies and a decrease in the number of cross dependencies. The kernel 5.18 includes patches that optimize the structure of task scheduler header files (kernel/sched). Compared to the previous release, CPU time consumption during the code compilation of kernel/sched has decreased by 61%, with actual time reduced by 3.9% (from 2.95 to 2.84 seconds).
- The use of the C11 standard, published in 2011, has been permitted in the kernel code. Previously, the kernel code had to comply with the ANSI C (C89) specification established back in 1989. In the build scripts of kernel 5.18, the option ‘—std=gnu89’ has been replaced with ‘—std=gnu11 -Wno-shift-negative-value’. The possibility of using the C17 standard was considered, but it would have required raising the minimum supported version of GCC, whereas the inclusion of C11 support fits within the current GCC (5.1) version requirements.
- Task scheduling performance has been enhanced on AMD processors with Zen microarchitecture, where multiple last-level caches (LLC) are provided for each node with local memory channels. The new version has eliminated the LLC imbalance between NUMA nodes, which significantly improves performance under certain workloads.
- Enhanced tools for application tracing in user space have been introduced. In the new kernel version, custom processes can create user events and write data to the trace buffer, which can be viewed through standard kernel tracing utilities such as ftrace and perf. User space tracing events are isolated from kernel tracing events. The status of events can be viewed via the file /sys/kernel/debug/tracing/user_events_status, while event registration and data writing can be done through the file /sys/kernel/debug/tracing/user_events_data.
- Megvalósult a funkciók hívásának nyomkövetési mechanizmusa — fprobe. Az fprobe API az ftrace-alapú, de korlátozódik a callback-kezelők funkcióba való belépési és befejező pontokhoz való csatolására. A kprobes és a kretprobes-tól eltérően, az új mechanizmus lehetővé teszi egy kezelő egyidejű használatát több funkcióhoz.
- Megszűnt a régi ARM processzorok (ARMv4 és ARMv5) támogatása, amelyek nem rendelkeznek memória kezelő egységgel (MMU). Az ARMv7-M rendszerek MMU nélküli támogatása megmaradt.
- Megszűnt a RISC-alapú NDS32 architektúra támogatása, amelyet az Andes Technologies processzorai használtak. A kód eltávolításra került, mert nem volt karbantartva, és az NDS32 támogatása az alap Linux kernelben nem volt igényelt (a megmaradt felhasználók a gyártók által biztosított speciális kernel-gyűjteményeket használják).
- Alapértelmezés szerint letiltották az a.out formátumú végrehajtható fájlok kernel-gyűjtését az alpha és m68k architektúrákon, ahol ez a formátum továbbra is használatban van. Valószínűleg a régi a.out formátum teljes eltávolítása hamarosan meg fog valósulni a kernel-ből. Az a.out formátum eltávolítására vonatkozó tervek 2019 óta folyamatban vannak.
- A PA-RISC architektúrához minimális támogatást nyújt a vDSO (virtuális dinamikusan megosztott objektumok) mechanizmus, amely korlátozott számú rendszerhívást biztosít a felhasználói térben kontextusváltás nélkül. A vDSO támogatás lehetővé tette a nem végrehajtható veremről való futást.
- Hozzáadva az Intel HFI (Hardware Feedback Interface) mechanizmus támogatása, amely lehetővé teszi a hardver számára, hogy információt adjon a kernelnek az egyes CPU-k aktuális teljesítményéről és energiahatékonyságáról.
- Hozzáadva egy meghajtó az Intel SDSi (Software-Defined Silicon) mechanizmushoz, amely lehetővé teszi a processzor további képességeinek aktiválását (például speciális utasítások és további cache-memória). Az ötlet az, hogy alacsonyabb áron szállíthatók olyan chipek, amelyek blokkolt kiterjesztett funkciókat tartalmaznak, amelyeket később 'meg lehet venni' és aktiválni anélkül, hogy a chip hardveres cseréjére lenne szükség.
- Hozzáadva az amd_hsmp illesztőprogram az AMD HSMP (Host System Management Port) interfész támogatásához, amely hozzáférést biztosít a processzorvezérlési funkciókhoz a speciális regiszterek készletén keresztül, amelyek az AMD EPYC szerverprocesszorokban jelentek meg a Fam19h generáció óta. Például az HSMP-n keresztül lekérhetők az energiafogyasztási és hőmérsékleti adatok, beállíthatók a frekvenciatartományok, aktiválhatók különböző teljesítményfokozó módok, valamint vezérelhetők a memória működési paraméterei.
- Az io_uring aszinkron bemenet/kimenet interfészén megvalósították az IORING_SETUP_SUBMIT_ALL opciót, amely lehetővé teszi fájlleírók készletének regisztrálását a gyűrűs pufferen, valamint az IORING_OP_MSG_RING műveletet, amely lehetővé teszi egy gyűrűs pufferről a jelküldést egy másik gyűrűs pufferről.
- A DAMOS (Data Access Monitoring-based Operation Schemes) mechanizmusban, amely lehetővé teszi a memória felszabadítását a memóriahozzáférések gyakoriságának figyelembevételével, kibővült a felhasználói térből származó memória műveletek ellenőrzésének lehetőségeivel.
- Integrálták a memóriafolyók (page folios) koncepciójának megvalósítását tartalmazó patch-ek harmadik sorozatát, amelyek hasonlítanak a kombinált oldalakról (compound pages) készült oldalra, de javított szemantikával és érthetőbb működési szervezettel rendelkeznek. A folyók használata felgyorsítja a memória kezelését egyes kernel alrendszerekben. A javasolt patch-ek végrehajtják a belső memóriairányító funkciók folyókra történő átvitelét, beleértve a get_user_pages() funkció különböző fajtáit. Támogatják a nagyobb folyók létrehozását az adatok előzetes olvasása során.
- A build rendszerben megjelent az USERCFLAGS és USERLDFLAGS környezeti változók támogatása, amelyek segítségével további zászlókat lehet átadni a fordítónak és a linkernek.
- Az eBPF alrendszerben a BTF (BPF Type Format) mechanizmusban, amely információt nyújt a BPF álkód típusellenőrzéséhez, megvalósították a változókhoz való annotációk hozzáadásának lehetőségét, amelyek a felhasználói tér memóriaterületeire hivatkoznak. Az annotációk segítik a BPF-kód ellenőrzéséért felelős rendszert a memóriahozzáférések pontosabb azonosításában és ellenőrzésében.
- Javasolt egy új memóriaallokáló kezelő a betöltött BPF programok tárolásához, amely hatékonyabban használja fel a memóriát nagyszámú BPF program betöltésekor.
- A madvise() rendszerhívásba új MADV_DONTNEED_LOCKED jelzőt adtak hozzá, amely kiegészíti a meglévő MADV_DONTNEED jelzőt. Ez lehetővé teszi, hogy a kernel előre értesítést kapjon egy memória blokk felszabadításáról, azaz arról, hogy a blokk már nem szükséges és a kernel használhatja. A MADV_DONTNEED-től eltérően a MADV_DONTNEED_LOCKED jelző használata is megengedett a RAM-ban rögzített memóriaoldalak esetében, amelyek a madvise híváskor rögzített státuszuk megváltoztatása nélkül cserélődnek ki, és ha a blokkhoz később újra hozzáférnek, és „page fault”-ot generálnak, akkor a rögzítés megtartásával térnek vissza. Továbbá, egy módosítást is hozzáadtak, amely lehetővé teszi a MADV_DONTNEED jelző használatát nagy memóriaoldalakkal a HugeTLB-ben.
- Virtualizáció és biztonság
- Az x86 architektúrához hozzáadták az Intel IBT (Indirect Branch Tracking) utasításvégrehajtási védelmi mechanizmus támogatását, amely megakadályozza az exploitek építésének technikáit visszahívás-orientált programozással (ROP, Return-Oriented Programming). Ezekben az esetekben az exploit már a memóriában lévő gépi utasításokból álló hívási lánc formájában épül fel, és az utolsó lépés általában egy visszatérési utasítás. A megvalósított védelmi módszer lényege, hogy blokkolja az indirekt ugrásokat a függvény testére, speciális ENDBR utasítás hozzáadásával a függvény elejére, és lehetővé teszi az indirekt ugrás végrehajtását csak akkor, ha az ENDBR utasításra ugrik (minden indirekt hívás, mint a JMP és CALL, mindig az ENDBR utasításra kell, hogy érkezzen, amely a függvény elején található).
- Szigorúbb határellenőrzést vezettek be a memcpy(), memmove() és memset() függvényekben, amelyet a fordítási szakaszban hajtanak végre a CONFIG_FORTIFY_SOURCE mód aktiválásakor. A módosítás célja a struktúrák elemeinek határait túllépő ellenőrzés, ahol az elemek mérete ismert. Megjegyzendő, hogy ez a megvalósított képesség lehetővé tenné a kernelben a memcpy()-hez kapcsolódó összes puffer-túltöltés blokkolását, amelyeket az elmúlt legalább három évben észleltek.
- Hozzáadva a második rész a frissített RDRAND ál-random számgeneráló kódjának megvalósításához, amely a /dev/random és /dev/urandom eszközök működéséért felel. Az új megvalósítás figyelemreméltó, mivel egységesítette a /dev/random és /dev/urandom működését, valamint védelmet nyújt a véletlen számok áramlásában a duplikációk megjelenése ellen a kezdeti futás során. virtuális gépekhez és áttér a BLAKE2s hash-funkció használatára a zűrzavaros keverési műveletekhez a SHA1 helyett. A változás lehetővé tette a ál-random számgeneráló biztonságának növelését, mivel megszabadult a problémás SHA1 algoritmustól és kizárta a RNG inicializáló vektor felülírását. Mivel a BLAKE2s algoritmus teljesítménye meghaladja a SHA1-t, annak alkalmazása a teljesítményre is kedvezően hatott.
- ARM64 architektúrához hozzáadva a „QARMA3” új mutató-authentikáló algoritmus támogatását, amely gyorsabb a QARMA algoritmusnál, miközben megőrzi a megfelelő védelmi szintet. A technológia lehetővé teszi, hogy az ARM64-specifikus utasításokat használják a visszatérési címek ellenőrzésére digitális aláírások segítségével, amelyeket a mutató legfelső biteiben tárolnak.
- ARM64 architektúrához támogatást valósítottunk meg a GCC 12-vel a visszatérési cím felülírása elleni védelem céljából a veremben történő buffertúlcsordulás esetén. A védelem célja, hogy a funkciónak átadott vezérlés után a visszatérési címet egy külön 'árnyék' veremben tárolja, és a cím kivonása a funkcióból való kilépés előtt történjen.
- Új kulcstároló (keyring) került hozzáadásra - „machine”, amely tartalmazza a rendszertulajdonos kulcsait (MOK, Machine Owner Keys), amelyeket a shim betöltő számára támogatnak. Ezek a kulcsok felhasználhatók a kernel alkatrészek digitális aláírással történő hitelesítésére, amelyeket a kezdeti betöltés után töltenek be (pl. kernel modulok).
- Eltávolítottuk a TPM-hez kapcsolódó aszimmetrikus zárt kulcsok támogatását, amelyeket a TPM elavult verziójában javasoltak, biztonsági problémáik vannak és a gyakorlatban nem terjedtek el.
- Hozzáadva a size_t típusú adatok védelme az egész számok túltöltése ellen. A kódban a size_mul(), size_add() és size_sub() kezelőket használják, amelyek lehetővé teszik a size_t típusú méretek biztonságos szorzását, összeadását és kivonását.
- A kernel build includes the flags "-Warray-bounds" and "-Wzero-length-bounds," which issue warnings when an index exceeds the bounds of an array and when zero-length arrays are used.
- The virtio-crypto device now supports encryption using the RSA algorithm.
- Hálózati alrendszer
- Support for port binding mode (locked mode) has been added to network bridge implementation, allowing users to send traffic through a port only with an allowed MAC address. Additionally, it is now possible to use multiple structures to assess the state of the STP (Spanning Tree Protocol). Previously, VLAN could only be directly tied to STP (1:1), where each VLAN was managed independently. The new version introduces the mst_enable parameter, which, when enabled, allows VLAN states to be monitored by the MST (Multiple Spanning Trees) module, facilitating an M:N binding model for VLANs.
- Folytatódik a memória felszabadításához kapcsolódó okok követésére szolgáló eszközök integrálása a hálózati stackbe (reason kódok). Az ok kódja a csomaggal kapcsolatos memória felszabadítása során kerül továbbításra, és lehetővé teszi olyan helyzetek figyelembevételét, mint például a csomag eldobása a fejléc mezők kitöltési hibái miatt, a spoofing kiszűrése az rp_filter segítségével, a hibás ellenőrző összeg, a memóriahiány, az IPSec XFRM szabályainak aktiválása, a TCP sorozatszám hibája stb.
- The ability to transmit network packets from BPF programs running in user space in BPF_PROG_RUN mode has been provided, where BPF programs execute in the kernel but return results to user space. Packets are transmitted using the XDP (eXpress Data Path) subsystem. A live packet processing mode is supported, allowing the XDP handler to redirect network packets on-the-fly to the network stack or other devices. It is also possible to create software traffic generators or inject network frames into the network stack.
- For BPF programs attached to network cgroups, auxiliary functions have been proposed to explicitly set the return value from system calls, which enables the transmission of more comprehensive information about the reasons for system call blocking.
- Support for fragmented packets residing in multiple buffers has been added to the XDP (eXpress Data Path) subsystem, allowing XDP to process Jumbo frames and apply TSO/GRO (TCP Segmentation Offload/Generic Receive Offload) for XDP_REDIRECT.
- The process of deleting network namespaces has been significantly accelerated, which has been in demand in some large systems with high traffic volumes.
- Hardver
- Az amdgpu illesztőprogramban alapértelmezés szerint engedélyezve van a FreeSync adaptív szinkronizálási technológia, amely lehetővé teszi a képernyő frissítési gyakoriságának megfelelő szabályozását, biztosítva a sima és zökkenőmentes képet játékok és videók lejátszása közben. Megerősítették a GPU Aldebaran stabil támogatását.
- Az i915 illesztőprogramhoz hozzáadták az Intel Alderlake N chip és az Intel DG2-G12 (Arc Alchemist) dedikált videokártyák támogatását.
- A nouveau illesztőprogramban a DP/eDP interfészekhez magasabb bitráták támogatását és a lttprs (Link-Training Tunable PHY Repeaters) kábelhosszabbítók támogatását biztosították.
- A drm (Direct Rendering Manager) alrendszerében az armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen és vc4 illesztőprogramokban hozzáadták a nomodeset paraméter támogatását, amely lehetővé teszi a videomódok kernellel történő váltásának letiltását és a grafikus rendereléshez szükséges hardveres gyorsítási eszközök használatát, megőrizve csupán a rendszer keretbufferével kapcsolatos funkciókat.
- Hozzáadták az ARM SoC Qualcomm Snapdragon 625/632 (amely az LG Nexus 5X és Fairphone FP3 okostelefonokban található), Samsung Exynos 850, Samsung Exynos 7885 (a Samsung Galaxy A8-ban található), Airoha (Mediatek/EcoNet) EN7523, Mediatek mt6582 (Prestigio PMT5008 3G táblagép), Microchip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 és i.MXRTxxxx támogatását.
- Hozzáadták az ARM-eszközök és a Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S, Prestigio PMT5008 3G táblagép), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 és OSMC Vero 4K+), Aspeed (Quanta S6Q, ASRock ROMED8HM3), Marvell MVEBU/Armada (Ctera C200 V1 és V2 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903) támogatását.
- Hozzáadták az AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, Renesas RZ/V2L, Texas Instruments TAS585M hangrendszerek és kodekek támogatását. Hozzáadták az Intel AVS DSP-chiphez tartozó hangillesztő program kezdeti megvalósítását. Frissítették az Intel ADL és Tegra234 illesztőprogramok támogatását, valamint módosításokat hajtottak végre a hang támogatásának javítása érdekében a Dell, HP, Lenovo, ASUS, Samsung és Clevo eszközökön.
A latin-amerikai Szabad Szoftver Alapítvány egyszerre bemutatta a teljesen szabad 5.18-as kernel változatát — Linux-libre 5.18-gnu, amelyet megtisztítottak a firmware- és illesztőprogram-összetevőktől, amelyek nem szabad elemeket vagy a gyártó által korlátozott területeket tartalmaznak. Az új verzióban megtisztították a MIPI DBI panel, VPU Amphion, MediaTek MT7986 WMAC, Mediatek MT7921U (USB) és Realtek 8852a/8852c illesztőprogramjait, az Intel AVS és Texas Instruments TAS5805M hangkártyák chipeit. A DTS fájlok is megtisztításra kerültek a különböző Qualcomm SoC-k számára, amelyek az AArch64 architektúrára épülnek. Frissült a blobok tisztítási kódja az AMD GPU, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectrum Ethernet, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP és MediaTek HCI UART illesztőprogramjaiban és alrendszereiben.
Forrás: opennet.ru
