A Linux 6.6 kernel kiadása

Két hónapnyi fejlesztés után Linus Torvalds bemutatta a Linux 6.6 kernel kiadását. A legszembetűnőbb változások között szerepel: új EEVDF feladatütemező; árnyék veremmechanizmus a kihasználások ellen; fs-verity támogatás az OverlayFS-ben; kvóták és xattr megvalósítása a tmpfs-ben; online fsck előkészítése az XFS-ben; megerősített nyomkövetés a „GPL-only” szimbólumok exportálásához; hálózati socketek támogatása az io_uring-ban; memória randomizálás a kmalloc() -ban; a ReiserFS elavultnak nyilvánítva; primitívek hozzáadva a Nouveau számára a Vulkan-driverek NVK-hez.

Az új verzióban 15,291 javítást fogadtak el 2,058 fejlesztőtől, a patch mérete 39 MB (a változások 14,844 fájlt érintettek, 553,359 kódsort adtak hozzá, 284,012 kódsort töröltek). Az előző kiadásban 14,674 javítást végeztek 2,016 fejlesztőtől, a patch mérete 78 MB volt. A 6.6-os verzióban bemutatott változások körülbelül 44%-a az eszközmeghajtókhoz kapcsolódik, körülbelül 17%-uk a hardverarchitektúráknak megfelelő kód frissítésével, 11%-uk a hálózati veremmel, 4%-uk a fájlrendszerekkel és 3%-uk a kernel belső alrendszereivel áll összefüggésben.

A 6.6 kernel fő újításai:

  • Memória és rendszerszolgáltatások
    • Bemutatásra került egy új EEVDF (Earliest Eligible Virtual Deadline First) feladatütemező, amely a CFS (Completely Fair Scheduler) helyébe lépett, melyet a 2.6.23-as kerneltől kezdve használtak. Az új ütemező a következő végrehajtásra váró folyamat kiválasztásakor figyelembe veszi azokat a folyamatokat, amelyek nem kaptak elegendő processzoridőt, vagy sokkal több processzoridőt kaptak, mint amennyit valóban megérdemeltek. Az első esetben a vezérlés átadása a folyamatnak kényszerített, míg a második esetben éppen ellenkezőleg, elhalasztják. A régi CFS ütemező az igényelt figyelmet igénylő folyamatok meghatározására heurisztikát és finomhangolást használt, míg az új ütemező ezeket nyíltan nyomon követi, és nem igényel finomhangolást. Azt feltételezik, hogy az EEVDF csökkenti az ilyen feladatok végrehajtási késleltetését, amelyeknél a CFS-nek problémái voltak az ütemezéssel.
    • Változtatásokat hajtottak végre a GPL-only kategória belső szimbólumainak kezelésében, amelyek célja a GPL-ből származó rétegek által a kernel belső alrendszereihez való hozzáférési korlátozások megkerülését célozzák meg, amelyek csak GPL licenc alatt álló kódokhoz engednek hozzáférést. A symbol_get() funkcióban a kereskedelmi modulok számára tilos a GPL-only-ként megjelölt szimbólumok keresése, és fordítva, a GPL-modulok nem találhatják meg a kereskedelmi modulokból exportált szimbólumokat.
    • További beállításokat adtak hozzá a munkasorokhoz (unbound workqueue) a processzor cache újrafelhasználásának hatékonyságának növelésére nagy rendszerekben, amelyek több szint 3 (L3) cache-t tartalmaznak. A kernelhez a tools/workqueue/wq_dump.py segédeszköz is hozzá lett adva a munkasorok aktuális konfigurációjának ellenőrzésére.
    • Az io_uring alrendszerhez kezdeti támogatást adtak a hálózati socketekhez specifikus műveletek és parancsok számára. Hozzá lett adva egy sysctl io_uring_disabled a rendszer szintű io_uring letiltásához. Az io_uring-ban jelentősen felgyorsult a közvetlen I/O (Direct I/O) aszinkron módban. A módosítások után a be- és kimeneti műveletek végrehajtásakor a sávszélesség növekedése és a késleltetések csökkenése 37%-ot ér el.
    • A PA-RISC architektúra számára megvalósították a JIT fordítót a BPF-hez.
    • A /sys/devices/system/cpu/smt/control beállításhoz numerikus paraméterek támogatása került hozzáadásra, meghatározva a CPU magok számára elérhető szálak számát (korábban csak az "on" és "off" értékek támogatták a szimmetrikus több szálasítás engedélyezését és letiltását). Az új lehetőség alkalmazható néhány PowerPC processzoron, amelyek támogatják a szimmetrikus több szálasítás forró csatlakoztatási módját, hogy a SMT-t bizonyos magokon az üzemelés során választhatóan aktiválják.
    • Folytatódik a Rust-for-Linux ágból származó változások átvitele, amelyek a Rust nyelv második nyelvként való használatára vonatkoznak az illesztőprogramok és kernel modulok fejlesztésében (a Rust támogatása alapértelmezés szerint nem aktív, és nem eredményezi a Rust kötelező gyűjtési függőségekként való szerepeltetését a kernelben). Átálltunk a Rust 1.71.1 és bindgen 0.65.1 verziók használatára. Megvalósult a 'Zeroable' típusjegy. Hozzáadtuk a 'paste!' és '#[derive(Zeroable)]' procedurális makrókat. Biztosítottuk a '#[pin_data]' kompatibilitását. Hozzáadtuk a 'pin_init_array_from_fn()' és 'pin_chain' inicializáló függvényeket. Bővítettük a 'types' modul funkcionalitását. A kunit egységtesztelő keretrendszerhez lehetőséget adtunk a Rust dokumentációból történő tesztelés elindítására.
    • Hozzáadtunk egy 'eventfs' alrendszert, amely jelentősen csökkenti a memóriafogyasztást a nyomkövetési rendszerben, megszüntetve a felesleges struktúrák tárolását, amelyek a nyomkövetési pontok fájlrendszerbeli ábrázolására szolgáltak. Korábban ilyen struktúrák jöttek létre minden nyomkövetési ponthoz függetlenül a nyomkövetés használatától. Az eventfs segítségével ezek a struktúrák dinamikusan, csak akkor jöhetnek létre, amikor szükség van rájuk.
    • Bővítettük a perf segédprogram funkcionalitását.
    • A "/proc/pid/smaps" fájlhoz hozzáadtuk az információt a memória azonos oldalainak egyesítésével kapcsolatos mechanizmus (KSM, Kernel Samepage Merging) hatékonyságának diagnosztizálásához.
    • Eltávolítottuk a Frontswap API-t, amely lehetővé tette a swap terület memóriában való elhelyezését, amely közvetlenül nem címezhető, és nem nyújt operatív információt a szabad hely meglétéről. Ezt az API-t csak a zswap használta, ezért a zswap-ban közvetlenül hasznosítjuk ezt a funkciót, megszabadulva a felesleges rétegektől.
    • A RISC-V architektúrához hozzáadtuk a felhasználói térből való teljesítményszámlálóhoz való hozzáférés és a kernel dump elhelyezésének lehetőségét a 4 GB-on kívül.
    • Kezdeti támogatást kaptak az ARM SME (Skálázható Mátrix Kiterjesztés) utasítások.
    • Lehetőséget biztosítunk a KDB, KGDB, kcov, KFENCE és KASAN debuggáló eszközök használatára LoongArch architektúrával rendelkező rendszereken.
    • Hozzáadtuk a kernel tesztelésére szolgáló fájlok támogatását a GitLab folyamatos integrációs rendszerén, amelyet grafikus illesztőprogramok fejlesztésénél alkalmaznak.
  • Lemezszubszisztéma, bemenet/kipontozás és fájlrendszerek
    • Az OverlayFS fájlrendszerhez hozzáadódott a fs-verity hash-ek megőrzésének támogatása az overlay.verity kiterjesztett attribútumban (xattr), amely az OverlayFS alsó rétegeiben lévő fájlok integritásának és hitelesítettségének ellenőrzésére használható kriptográfiai hash-ek és kulcsok által. Így az OverlayFS mostantól tartalmazza az összes olyan változást, amely a Composefs projekthez szükséges az OverlayFS és EROFS fájlrendszer fölötti bővítmény formájában való működéshez.
    • Az XFS fájlrendszer felkészítése elkezdődött az fsck segédprogram online módban, a fájlrendszer lecsatolása nélkül történő ellenőrzésére és javítására. Ezenkívül az XFS-ben megvalósult a nagy kötetek (folios) használatának lehetősége az oldal-cache-ben, és hozzáadtak néhány kapcsolódó optimalizálást, amelyek jelentősen javították a teljesítményt egyes terhelések esetén.
    • A tmpfs fájlrendszerhez hozzáadódott a felhasználói kiterjesztett attribútumok (user xattrs), közvetlen I/O és a felhasználóhoz és csoporthoz kapcsolódó kvóták támogatása. Stabilizálták a könyvtárakra vonatkozó eltolásokat, ami megoldotta a tmpfs NFS-en keresztüli exportálásával kapcsolatos problémákat.
    • A csatlakoztatás kezelésére szolgáló API-hoz a biztonság növelése érdekében hozzáadódott az FSCONFIG_CMD_CREATE_EXCL jelző, amely megtiltja a superblock több csatlakozási ponton történő megosztását (megtiltja egy partíció több csatlakozási pontra való csatlakoztatását). A mount segédprogramban a jelző engedélyezésére javasolt opció a „—exclusive”.
    • A VFS alrendszerhez hozzáadódott a hozzáférési és módosítási idő (atime, mtime) paraméterek operatív módosításának támogatása. Korábban az időadatok késlekedéssel tükröződtek, ami megnehezítette a friss adatok nyomon követését a cache-ben olyan rendszerekben, mint az NFS (a fájl módosításának késlekedése miatt a rendszer tévesen hihette, hogy a cache-ben lévő adatok aktuálisak). Az új lehetőség elérhető a Btrfs, Ext4, tmpfs és XFS fájlrendszerek számára.
    • A Btrfs-ben elavultnak nyilvánították a beépített integritás-ellenőrzési mechanizmust, amelyet a BTRFS_FS_CHECK_INTEGRITY paraméterrel lehetett aktiválni a build során. A megjelölt mechanizmus már nem kap támogatást, többé nem tesztelik, és további terhelést jelent a CPU-ra és a memóriára. Ezen kívül a Btrfs-ben optimalizálták az új fájlrendszer-ellenőrzési kód (scrub) teljesítményét.
    • Az Ext4 fájlrendszerben periódikus ellenőrzések kerültek bevezetésre a szuperblokk frissítésére, és felgyorsultak a szabad memória műveletei a fájl végére való írás során.
    • A FUSE alrendszerhez hozzáadták a btime attribútum támogatását, amely meghatározza az inode létrehozásának időpontját.
    • Tiltott a jogosultságok módosítása szimbolikus hivatkozások esetén.
    • Bevezetésre került a fchmodat2() rendszerhívás, amely a fchmodat() rendszerhívástól eltér egy további argumentummal a flag-ek megadására. A flag-ek közül egyelőre csak az AT_SYMLINK_NOFOLLOW és AT_EMPTY_PATH támogatott, amelyek lehetővé teszik, hogy a libc-függvény fchmodat() használata során elkerüljük a szimbolikus hivatkozások dereferálását, és a fájlleíró használatát üres útvonal megadásakor.
    • Az EROFS (Extendable Read-Only File System) fájlrendszerben, amelyet az írásvédett partíciókon való használatra terveztek, hozzáadták a Deflate tömörítési algoritmus támogatását. Az kiterjesztett attribútumok keresésének felgyorsítására valószínűségi struktúrát, bloom filter-t használtak.
    • Hozzáadták a CONFIG_BUFFER_HEAD beállítást, amely lehetővé teszi a kernel összegyűjtését a buffer_head struktúra használata nélkül. Buffer_head nélkül blokk eszközök és néhány fájlrendszer, például xfs, btrfs, cramfs, erofs és squashfs használható.
    • A bloc eszközökhez készült ublk meghajtó, amely lehetővé teszi a specifikus logika a felhasználói térben való végrehajtását, hozzáadta a zónázott tárolóeszközök támogatását (blokkcsoportok vagy szektorok zónákra osztása, ahol csak sorozatos adatbevitelt engedélyeznek, az egész blokk csoport frissítésével).
    • A ReiserFS fájlrendszer implementálása a támogatott kategóriából az elavult (Obsolete) kategóriába került. A ReiserFS támogatásának megszüntetése 2025-re van tervezve. Az elavult kategóriába való áthelyezés okaként említik a fájlrendszer karbantartásának stagnálását, a 2038-as probléma megoldatlanságát, a hibatűrés biztosításának hiányát és a közös fájlrendszer-változtatások, például az új API támogatásához kapcsolódó karbantartási munka csökkentésének szándékát.
    • Az NFS szerverben megvalósították a felírási műveletek delegálásának mechanizmusát az NFSv4-hez, ami növeli a fájlok írásának gyorsítótárazásának hatékonyságát a forgalom csökkentése érdekében. Bevezették a READ_PLUS művelet támogatását, amelyet az NFS 4.2 határozott meg.
    • A Ceph fájlrendszerbe támogatás került a fscrypt számára.
  • Virtualizáció és biztonság
    • Bevezetésre került a Shadow Stack mechanizmusának megvalósítása, amely lehetővé teszi számos exploit működésének blokkolását az Intel processzorok hardveres lehetőségeit kihasználva, megvédve a visszatérési cím felülírását a veremben történő túlcsordulás esetén. A védelem lényege, hogy a funkciónak átadott irányítás után a visszatérési címeket a processzor nemcsak a hagyományos veremben, hanem egy külön 'árnyék' veremben is eltárolja, amelyet közvetlenül nem lehet módosítani. A funkcióból való kilépés előtt a visszatérési cím az árnyék veremből kerül kiolvasásra, és ellenőrzésre kerül a fő veremből származó visszatérési címmel. Az eltérés a címek között kivételt generál, megakadályozva azokat a helyzeteket, amikor az exploit sikeresen felülírta a címet a fő veremben. A hardveres árnyék verem csak 64 bites build-ekben támogatott, míg a 32 bites build-ekben szoftveres emulációt alkalmaznak.
    • Támogatás került a Clang fordítóval való buildeléshez a CFI (Control Flow Integrity) védelmi mód aktiválásával, amely blokkolja a normál végrehajtási sorrendet (control flow) zavaró exploitok alkalmazását, amelyek a memóriában tárolt függvénymutatókat módosítják.
    • A RISC-V architektúrához a kernel memória elhelyezésének véletlenszerűsítése került a betöltés során.
    • A seccomp() rendszerhívásba hozzáadva lett a SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP flag, amely lehetővé teszi az események szinkron módon történő feldolgozását a nyomon követett folyamatokból, hatékonyabb feladatütemező működés érdekében.
    • A kmalloc() függvényben biztosítva lett a slab cache-ek véletlenszerűsítése, amely megnehezíti a kernel sebezhetőségek kihasználását.
    • A SELinux kötelező hozzáférés-ellenőrzési rendszerének aktiválásával kapcsolatos opciókból eltávolításra került az Egyesült Államok Nemzeti Biztonsági Ügynökségének említése. Mivel a projekt már 20 éve a közösség égisze alatt fejlődik, és független karbantartók által támogatott, a 'SELinux' elnevezést választották az 'NSA SELinux' helyett a Kconfig megjegyzésekben és dokumentációban (például a SECURITY_SELINUX build paraméter magyarázata 'NSA SELinux Support'-ról 'SELinux Support'-ra változott).
    • A userfaultfd() rendszerhívásba hozzáadva lett az UFFDIO_POISON művelet, amely lehetővé teszi a memória 'mérgezett' (poisoned) lapjainak megjelölését, ami felhasználható a sérült memória lapok átvitelére migráláskor virtuális gépekhez egyik rendszerről a másikra.
    • A VFIO alrendszerhez új karakteres interfész (\/dev\/vfio\/devices\/vfioX) került hozzáadásra a VFIO eszközök kezelésére, amely lehetővé teszi a felhasználó számára, hogy közvetlenül megnyissa az eszköz fájlját, elkerülve az elavult csoportos interfészt \dev\vfio\$groupID.
    • A szerveren Az NFS leállította az elavult Kerberos titkosítási típusok támogatását, amelyek a DES és 3DES algoritmusokat használják.
    • A Hyper-V hipervizor környezetben való indításakor hozzáadódott a támogatás a vendégrendszerek számára, amelyeket az AMD SEV-SNP (Secure Nested Paging) és az Intel TDX (Trusted Domain Extensions) technológia véd.
    • A kernel fordításakor "W=1" üzemmódban a fordító alapértelmezés szerint engedélyezi a következő figyelmeztetéseket: "-Wformat-overflow", "-Wformat-truncation", "-Wstringop-overflow" és "-Wrestrict". Minden fordítás esetén engedélyezve van a "-Wenum-conversion" figyelmeztetés.
  • Hálózati alrendszer
    • Az AF_XDP (eXpress Data Path) címzéscsalád megvalósítása kiterjedt a több pufferben tárolt csomagok kezelésének lehetőségével (például egy pufferben található a csomag fejléc, míg a másodikban az adatok, vagy egy több puffert tartalmazó láncban helyezkedhetnek el nagy jumbo Ethernet keretek). Az AF_XDP socketet használó programok mostantól több pufferből is képesek fogadni és küldeni csomagokat.
    • A BPF alrendszerhez hozzáadódott az IPv4 és IPv6 csomagok defragmentálásának támogatása, valamint a fragmentált csomagok szűrésének lehetősége.
    • A BPF-hez új update_socket_protocol kezelő került hozzáadásra, amely lehetővé teszi a BPF programok számára a kért protokoll megváltoztatását új socketek esetén. Például a BPF program átlátszóan helyettesítheti a TCP protokollt MPTCP-ra (multipath TCP), hogy optimalizálja az alkalmazás forgalmát. A BPF-hez hozzáadódott a csomagok irányításának kezelése különböző szálakon az MPTCP-n belül is.
    • A ksmbd modulról eltávolították a kísérleti fejlesztés jelzést, amely a kernel szintjén működő SMB3 protokoll alapú fájlszerver megvalósítását kínálja. Hozzáadódott az olvasási műveletek egyesítésének támogatása ("read compound" kérdések).
  • Hardver
    • A DRM alrendszerbe (Direct Rendering Manager) módosításokat végeztek, amelyek szükségesek a nyílt NVK meghajtó hatékony működéséhez az NVIDIA grafikus kártyák Vulkan grafikai API megvalósításához. A DRM Nouveau meghajtót eredetileg az OpenGL megvalósítására tervezték, így hiányoznak belőle a Vulkan meghajtók hatékony működéséhez szükséges primitívek, például a szinkronizált objektumok támogatása és a virtuális címzett tér kezelése.
    • Az AMDGPU meghajtóban a SDMA 6.1.0, HDP 6.1, SMUIO 14.0, PSP 14.0, IH 6.1 és GFX 9.4.3 támogatás kerül bemutatásra. Az PSP (Platform Security Processor) induló kódja újraírásra került. Kiterjesztették a FreeSync technológia, azaz az adaptív szinkronizáció támogatását (hozzáadva a Freesync Panel Replay V2 támogatását).
    • Az i915 meghajtóban folytatódik az Intel Meteor Lake chipjeinek támogatásának megvalósítása. Javult a HDCP (High-bandwidth Digital Content Protection) másolásvédelmi technológia támogatása. Az interfész a kijelzővel való kapcsolat érdekében újraírásra került.
    • A Kconfig-ból eltávolították a mikroprogram betöltésének letiltására vonatkozó opciókat a fordítási szakaszban - MICROCODE_INTEL és MICROCODE_AMD. A kernel mostantól mindig a mikroprogram betöltő kódjával készül az x86 rendszerekhez, de a mikroprogram tényleges betöltése letiltható a 'dis_ucode_ldr' kernel paraméter megadásával.
    • A hangrendszerhez új funkciót adtak, lehetővé téve a hangberendezések kezelését, amelyek az IIO (Industrial I/O) rendszeren keresztül vannak csatlakoztatva.
    • Támogatást kaptak az Intel LunarLake, Intel ArrowLake és AMD ACP5x hang interfészek, valamint a Cirrus Logic CS42L43, Realtek RT1017 és TI TAS2781 codec-ek, továbbá a Cirrus Logic CS35L56 és winic aw88261 erősítők. Az ASoC AMD Van Gogh támogatása is hozzá lett adva.
    • Hozzáadásra került az USB MIDI 2.0 Gadget meghajtó, amely az ALSA UMP rawmidi eszközhöz kötődő USB MIDI 2.0 interfész emulációját végzi.
    • Támogatást kaptak a Broadcom ASP 2.0 és Marvell 88Q2XXX Ethernet vezérlők.
    • Támogatást kaptak a Visionox R66451, TDO TL050HDV35, KD070FHFID015, Inanbo T28CP45TN89 és EDT ET028013DMA panelek, a Loongson kijelzővezérlők és az Azoteq IQS7222D/IQS7210A/7211A érintőképernyő-vezérlők.
    • Támogatást kaptak az ARM SoC Qualcomm SM4450 (Snapdragon 4 Gen 2), TI AM62P5, Intel Agilex5, Qualcomm ipq5018, AN400 (Amlogic T7).
    • Támogatást kaptak az ARM platformok, mint például a Samsung Galaxy Tab 3 8.0, FriendlyElec NanoPC T6, Amlogic A311D2, Khadas Vim4, Xiaomi SM7125, Facebook Yosemite 4, Orange Pi Zero 3, Radxa ROCK 4SE.

A latin-amerikai Szabad Szoftver Alapítvány egy teljesen szabad 6.6-es kernel verziót, a Linux-libre 6.6-gnu-t alakított ki, amely mentes a gyártó által korlátozott elemekkel és nem szabad szoftverekkel rendelkező firmware-ktől és meghajtóktól. A 6.6-os kiadásban frissült a blobok tisztítására vonatkozó kód különböző meghajtókban és rendszerekben, például a TI gigabit RU Ethernet, a MediaTek 792x wifi, a Cirrus Logic cs42l43 mfd, cs35l56 HD-audio és aw88261 SoC meghajtókban. A blobok neveinek tisztítása megtörtént a dts fájlokban az AArch64 architektúrához. Blobokat távolítottak el az új ivpu, bluetooth meghajtókban, az érintőképernyő mérő meghajtóban és a Qualcomm Venus V4L2 kódoló/dekódolónál.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster