Linux 5.8 kernel kiadás

Két hónapos fejlesztés után Linus Torvalds benyújtott kernel kiadás Linux 5.8. A legfigyelemreméltóbb változások közé tartozik: KCSAN versenyállapot-érzékelő, univerzális mechanizmus az értesítések felhasználói térbe történő eljuttatására, hardveres támogatás a beépített titkosításhoz, továbbfejlesztett biztonsági mechanizmusok az ARM64-hez, az orosz Baikal-T1 processzor támogatása, a procfs példányok külön csatlakoztatásának lehetősége , Shadow biztonsági mechanizmusok megvalósítása az ARM64 Call Stack és BTI számára.

Az 5.8-as kernel lett a legnagyobb változtatások számát tekintve az összes kernel közül a projekt teljes fennállása alatt. Ráadásul a változtatások nem egy alrendszerhez kapcsolódnak, hanem a kernel különböző részeit fedik le, és főként a belső átdolgozással és tisztítással kapcsolatosak. A legnagyobb változások a járművezetőknél tapasztalhatók. Az új verzió 17606 2081 javítást tartalmazott 20 65 fejlesztőtől, amelyek a kernel kódtárában lévő összes fájl körülbelül 16180%-át érintették. A javítás mérete 1043240 MB (a változtatások 489854 5.7 fájlt érintettek, 15033 39 37 kódsor került hozzáadásra, 5.8 16 sor törölve lett). Összehasonlításképpen: az 11-es ág 3 4 javítást tartalmazott, a javítás mérete pedig XNUMX MB. Az XNUMX-ban bevezetett változtatások körülbelül XNUMX%-a az eszközillesztőkkel kapcsolatos, a változtatások hozzávetőleg XNUMX%-a a hardverarchitektúrák kódjának frissítéséhez, XNUMX%-a a hálózati veremhez, XNUMX%-a a fájlrendszerekhez és XNUMX%-a. belső kernel alrendszerekhez kapcsolódnak.

A főbb innovációk:

  • Virtualizáció és biztonság
    • Azon kernelmodulok betöltése biztosított, amelyekben kóddal rendelkező szakaszok vannak, amelyekben a végrehajtást és az írást lehetővé tevő bitek egyidejűleg vannak beállítva. A változtatást egy nagyobb projekt részeként hajtották végre, hogy megszabadítsák a rendszermagot az egyidejű végrehajtást és írást lehetővé tevő memórialapok használatától.
    • Mostantól lehetőség van külön procfs példányok létrehozására, amelyek lehetővé teszik több procfs beillesztési pont használatát, amelyek különböző opciókkal vannak csatlakoztatva, de ugyanazt a folyamatazonosító névteret (pid névteret) tükrözik. Korábban az összes procfs beillesztési pont csak egy belső reprezentációt tükrözött, és a beillesztési paraméterek bármilyen módosítása hatással volt az azonos folyamatazonosító névtérhez társított összes többi csatolási pontra. Azok a területek, ahol a különböző opciókkal történő felszerelésre szükség lehet, a beágyazott rendszerek könnyű leválasztásának megvalósítása, amely képes elrejteni bizonyos típusú folyamatokat és információs csomópontokat a procfs-ben.
    • A mechanizmus támogatása megtörtént az ARM64 platformon
      Shadow-Call Stack, amelyet a Clang fordító biztosítja, hogy megvédje a függvény visszatérési címét a verempuffer túlcsordulása esetén. A védelem lényege, hogy a visszaküldési címet egy külön „árnyék” verembe mentjük, miután a vezérlést átadtuk egy függvénynek, és a függvényből való kilépés előtt lekérjük ezt a címet.

    • Az ARM64 platformhoz utasítástámogatás került hozzáadásra ARMv8.5-BTI (Branch Target Indicator) az olyan utasításkészletek végrehajtásának védelmére, amelyekhez nem szabad elágazni. A kód tetszőleges szakaszaira való áttérés blokkolása azért van megvalósítva, hogy megakadályozza a modulok létrehozását a visszatérés-orientált programozási technikákat használó exploitokban (ROP – Return-Oriented Programming; a támadó nem próbálja meg elhelyezni a kódját a memóriában, hanem a már meglévő darabokon működik). gépi utasítások, amelyek egy visszatérési vezérlő utasítással végződnek, amelyekből egy híváslánc épül fel a kívánt funkcionalitás elérése érdekében).
    • Hozzáadott hardveres támogatás a blokkeszközök beépített titkosításához (Beépített titkosítás). Az Inlinep titkosítási eszközök jellemzően a meghajtóba vannak beépítve, de logikailag a rendszermemória és a lemez között helyezkednek el, átlátszóan titkosítják és visszafejtik az I/O-kat a kernel által meghatározott kulcsok és egy titkosítási algoritmus alapján.
    • Hozzáadtuk az "initrdmem" kernel parancssori opciót, amely lehetővé teszi az initrd fizikai memóriacímének megadását a kezdeti rendszerindító lemezkép RAM-ba helyezésekor.
    • Új képesség hozzáadva: CAP_PERFMON a tökéletes alrendszer eléréséhez és a teljesítményfigyelés végrehajtásához. CAP_BPF, amely lehetővé tesz bizonyos BPF-műveleteket (például BPF-programok betöltését), amelyek korábban CAP_SYS_ADMIN-jogokat igényeltek (a CAP_SYS_ADMIN-jogok most a CAP_BPF, CAP_PERFMON és CAP_NET_ADMIN kombinációira oszlanak).
    • Hozzáadta egy új virtio-mem eszköz, amely lehetővé teszi a memória üzem közbeni csatlakoztatását és bekapcsolását a vendégrendszerekbe.
    • A leképezési műveletek visszahívása a /dev/mem mappában, ha az eszközillesztő átfedő memóriaterületeket használ.
    • Hozzáadott sebezhetőség elleni védelem CROSSTalk/SRBDS, amely lehetővé teszi néhány másik CPU magon végrehajtott utasítás végrehajtásának eredményének visszaállítását.
  • Memória- és rendszerszolgáltatások
    • A kód formázására vonatkozó szabályokat meghatározó dokumentumban elfogadott ajánlások a befogadó terminológia használatára. A fejlesztőknek nem ajánlott a „mester / slave” és „feketelista / fehérlista” kombinációk, valamint a „szolga” szó külön-külön használata. Az ajánlások csak e kifejezések új felhasználására vonatkoznak. A magban már meglévő megadott szavak említése érintetlen marad. Az új kódban a megjelölt kifejezések használata megengedett, ha szükséges a felhasználói térben megjelenő API és ABI támogatásához, valamint a kód frissítésekor olyan meglévő hardverek vagy protokollok támogatására, amelyek specifikációi bizonyos kifejezések használatát igénylik.
    • Hibakereső eszközt tartalmaz KCSAN (Kernel Concurrency Sanitizer), dinamikus észlelésre tervezték versenykörülmények a mag belsejében. A KCSAN használata támogatott a GCC-ben és a Clang-ben való építéskor, és a fordítási időben speciális módosításokra van szükség a memória-hozzáférés nyomon követéséhez (a memória beolvasásakor vagy módosításakor aktiválódó töréspontokat használnak). A KCSAN fejlesztésének középpontjában a hamis pozitív megelőzés, a méretezhetőség és az egyszerű használat állt.
    • Hozzáadva univerzális mechanizmus értesítések kézbesítése a kernelből a felhasználói térbe. A mechanizmus a szabványos pipe-illesztőprogramon alapul, és lehetővé teszi a kernel értesítéseinek hatékony elosztását a felhasználói térben nyitott csatornákon. Az értesítések fogadási pontjai speciális módban nyíló csövek, amelyek lehetővé teszik a kerneltől kapott üzenetek gyűrűpufferben való felhalmozását. Az olvasást a szokásos read() függvény végzi. A csatorna tulajdonosa határozza meg, hogy a kernel mely forrásait kell figyelni, és definiálhat egy szűrőt bizonyos típusú üzenetek és események figyelmen kívül hagyására. Az események közül jelenleg csak a kulcsokkal végzett műveletek támogatottak, például kulcsok hozzáadása/eltávolítása, attribútumuk módosítása. Ezeket az eseményeket a tervek szerint a GNOME-ban fogják használni.
    • A „pidfd” funkció folyamatos fejlesztése a PID újrafelhasználási helyzetek kezelésében (a pidfd egy adott folyamathoz van társítva, és nem változik, míg a PID társítható egy másik folyamathoz, miután az adott PID-hez társított jelenlegi folyamat leáll). Az új verzió támogatja a pidfd használatát egy folyamat névterekhez csatolásához (lehetővé teszi a pidfd megadását a setns rendszerhívás végrehajtásakor). A pidfd használatával egy hívással vezérelhető egy folyamat többféle névtérhez való csatolása, jelentősen csökkentve a szükséges rendszerhívások számát, és atomi módban valósítja meg a csatolást (ha az egyik névterhez való csatolás sikertelen, a többi nem csatlakozik) .
    • Új rendszerhívás lett hozzáadva a faccessat2(), amely különbözik a
      faccessat() egy további argumentum a POSIX ajánlásoknak megfelelő jelzőkkel (korábban ezeket a jelzőket emulálták a C könyvtárban, és az új faccessat2 lehetővé teszi azok megvalósítását a kernelben).

    • A C csoportban tette hozzá a memory.swap.high beállítás, amellyel lelassítható a túl sok swap területet igénylő feladatok.
    • Az aszinkron I/O interfészhez io_uring hozzáadva a tee() rendszerhívás támogatását.
    • Hozzáadott mechanizmus "BPF iterátor, amelynek célja a kernelstruktúrák tartalmának felhasználói térbe történő kiadása.
    • Biztosítani gyűrű puffer használatának lehetősége a BPF programok közötti adatcseréhez.
    • A mechanizmusba padata, amelyet a feladatok párhuzamos végrehajtásának megszervezésére terveztek a kernelben, hozzáadott támogatást a többszálú feladatokhoz terheléselosztással.
    • A pstore mechanizmusban, amely lehetővé teszi a hibakeresési információk mentését az összeomlás okáról olyan memóriaterületeken, amelyek nem vesznek el az újraindítások között, - tette hozzá háttérprogram az információk mentéséhez az eszközök blokkolásához.
    • A PREEMPT_RT kernelágból megmozdult helyi zárak megvalósítása.
    • Hozzáadva új pufferallokációs API (AF_XDP), amelynek célja a hálózati illesztőprogramok írásának egyszerűsítése XDP (eXpress Data Path) támogatással.
    • A RISC-V architektúra esetében a rendszermag-összetevők KGDB használatával történő hibakeresésének támogatása megvalósult.
    • A 4.8-as kiadás előtt a kernel felépítéséhez használható GCC verzióval szemben támasztott követelmények megemelkedtek. Az egyik következő kiadásban a tervek szerint a lécet a GCC 4.9-re emelik.
  • Lemez alrendszer, I/O és fájlrendszerek
    • Az Eszközleképezőben - tette hozzá új dm-ebs (emulate block size) kezelő, amellyel kisebb logikai blokkméretet emulálhatunk (például 512 bájtos szektorokat emulálhatunk 4K szektorméretű lemezeken).
    • Az F2FS fájlrendszer mostantól támogatja az LZO-RLE algoritmussal történő tömörítést.
    • dm-kriptában tette hozzá a titkosított kulcsok támogatása.
    • A Btrfs javította az olvasási műveletek kezelését közvetlen I/O módban. Felszereléskor felgyorsult törölt alszekciók és szülő nélkül maradt könyvtárak ellenőrzése.
    • A CIFS-hez hozzáadtunk egy „nodelete” paramétert, amely lehetővé teszi a normál engedélyek ellenőrzését a kiszolgálón, de megtiltja a kliens számára a fájlok vagy könyvtárak törlését.
    • Az Ext4 javította a hibakezelést ENOSPC többszálú használat esetén. Az xattr támogatja a GNU Hurdban használt gnu.* névteret.
    • Ext4 és XFS esetén a DAX-műveletek támogatása engedélyezett (közvetlen hozzáférés a fájlrendszerhez, az oldalgyorsítótár megkerülése a blokkeszköz-szint használata nélkül) az egyes fájlok és könyvtárak vonatkozásában.
    • Rendszerhívásban statx() zászló hozzáadva STATX_ATTR_DAX, amely megadásakor a DAX motor segítségével kéri le az információkat.
    • EXFAT tette hozzá rendszerindítási terület ellenőrzésének támogatása.
    • FAT-ban javított FS elemek proaktív betöltése. Egy lassú 2 TB-os USB-meghajtó tesztelése azt mutatta, hogy a teszt befejezési ideje 383-ról 51 másodpercre csökkent.
  • Hálózati alrendszer
    • A hálózati hidak működését vezérlő kódban tette hozzá protokoll támogatás MRP (Media Redundancy Protocol), amely több Ethernet kapcsoló hurkolásával hibatűrést tesz lehetővé.
    • A forgalomirányító rendszerhez (Tc) tette hozzá új „kapu” akció, amely lehetővé teszi bizonyos csomagok feldolgozásának és elvetésének időintervallumának meghatározását.
    • A rendszermaghoz és az ethtool segédprogramhoz hozzáadták a csatlakoztatott hálózati kábel tesztelésének és a hálózati eszközök öndiagnosztikájának támogatását.
    • Az MPLS (Multiprotocol Label Switching) algoritmus támogatása hozzáadásra került az IPv6-veremhez a csomagok többprotokollú címkeváltással történő útválasztásához (az MPLS korábban támogatott volt az IPv4-hez).
    • Támogatás hozzáadva az IKE (Internet Key Exchange) és IPSec-csomagok TCP-n keresztüli továbbításához (RFC 8229) az esetleges UDP-blokkolások megkerüléséhez.
    • Hozzáadta hálózati blokkeszköz rnbd, amely lehetővé teszi egy blokkeszköz távoli elérésének megszervezését az RDMA átvitel (InfiniBand, RoCE, iWARP) és az RTRS protokoll használatával.
    • A TCP veremben tette hozzá a tartománytömörítés támogatása a szelektív nyugtázási (SACK) válaszokban.
    • IPv6 esetén végrehajtva TCP-LD támogatás (RFC 6069, Hosszú kapcsolati zavarok).
  • Оборудование
    • Az Intel videokártyák i915 DRM illesztőprogramja alapértelmezés szerint támogatja az Intel Tiger Lake (GEN12) chipeket, amelyekhez végrehajtva a SAGV (System Agent Geyserville) rendszer használatának képessége a frekvencia és a feszültség dinamikus beállítására az energiafogyasztástól vagy a teljesítménykövetelményektől függően.
    • Az amdgpu illesztőprogram támogatja az FP16 pixel formátumot, és képes együttműködni a videómemóriában található titkosított pufferekkel (TMZ, Trusted Memory Zone).
    • Hozzáadott támogatás az AMD Zen és Zen2 processzorok teljesítményérzékelőihez, valamint az AMD Ryzen 4000 Renoir hőmérsékletérzékelőihez. Az AMD Zen és a Zen2 támogatja az energiafogyasztási információk interfészen keresztüli lekérését RAPL (Running Average Power Limit).
    • Az NVIDIA módosító formátum támogatása a Nouveau illesztőprogramhoz. A gv100 esetében lehetőség van váltottsoros szkennelési módok használatára. Hozzáadott vGPU észlelés.
    • Adreno A405, A640 és A650 GPU-k támogatása hozzáadva az MSM (Qualcomm) illesztőprogramhoz.
    • Hozzáadva belső keretrendszer a DRM (Direct Rendering Manager) erőforrások kezeléséhez.
    • Támogatás hozzáadva a Xiaomi Redmi Note 7 és a Samsung Galaxy S2 okostelefonokhoz, valamint az Elm/Hana Chromebook laptopokhoz.
    • Hozzáadott illesztőprogramok az LCD panelekhez: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Támogatás hozzáadva az ARM kártyákhoz és platformokhoz Renesas "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-50, Check PointeMMXNUMX-XNUMX, LIME
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.

    • Támogatás hozzáadva a Loongson-2K (rövidítve Loongson64) MIPS processzorhoz. A CPU Loongson 3 esetében a KVM hypervisor segítségével történő virtualizáció támogatása hozzáadásra került.
    • Hozzáadva
      támogatja az orosz Baikal-T1 processzort és az arra épülő rendszert a chipen BE-T1000. A Baikal-T1 processzor két P5600 MIPS 32 r5 szuperskalár magot tartalmaz, amelyek 1.2 GHz-en működnek. A chip L2 gyorsítótárat (1 MB), DDR3-1600 ECC memóriavezérlőt, 1 10 Gb Ethernet portot, 2 1 Gb Ethernet portot, PCIe Gen.3 x4 vezérlőt, 2 SATA 3.0 portot, USB 2.0, GPIO, UART, SPI, I2C portot tartalmaz. A processzor hardveres támogatást nyújt a virtualizációhoz, SIMD utasításokat és integrált hardveres kriptográfiai gyorsítót, amely támogatja a GOST 28147-89 szabványt. A chipet az Imagination Technologies által licencelt MIPS32 P5600 Warrior processzormag segítségével fejlesztették ki.

Ugyanakkor a Latin-Amerikai Szabad Szoftver Alapítvány alakított
opció teljesen ingyenes kernel 5.8 - Linux-mentes 5.8-gnu, megtisztítva a nem szabad komponenseket vagy kódrészleteket tartalmazó firmware-től és illesztőprogram-elemektől, amelyek terjedelmét a gyártó korlátozza. Az új kiadás letiltja a blob-betöltést az Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Enhanced Asynchronous Sample Rate Converter, Maxim Integrated MAX98390 ZSF38060, Maximum Integrated MAX2 Speed86, Microkerse Aimpmimi Zs6656, Microkerse Aimpmimi XNUMX SpeedXNUMX. és IXNUMXC EEPROM Slave. Frissített blob-tisztító kód az Adreno GPU-ban, a HabanaLabs Goya-ban, az xXNUMX-os érintőképernyőben, a vtXNUMX-ban és a btbcm-illesztőprogramokban és alrendszerekben.

Forrás: opennet.ru

Hozzászólás