Izid jedra Linux 6.2

Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 6.2. Med najopaznejšimi spremembami: omogočen sprejem kode pod licenco Copyleft-Next, izboljšana realizacija RAID5/6 v Btrfs, nadaljevanje integracije podpore za jezik Rust, zmanjšani stroški pri zaščiti pred napadi Retbleed, dodana možnost uravnavanja porabe pomnilnika pri povratnem pisanju, za TCP dodan mehanizem uravnavanja obremenitve PLB (Protective Load Balancing), dodan hibridni mehanizem zaščite toka izvajanja ukazov (FineIBT), v BPF uvedena možnost opredeljenja lastnih objektov in struktur podatkov, vključena je bila utilita rv (Runtime Verification), zmanjšana poraba energije pri realizacijah zaklepanj RCU.

V novo različico je sprejetih 16843 popravkov od 2178 razvijalcev, velikost popravka znaša 62 MB (spremembe so izvedle 14108 datotek, dodanih je 730195 vrstic kode, odstranjeno 409485 vrstic). Približno 42% vseh predstavljenih sprememb v 6.2 se nanaša na gonilnike naprav, približno 16% sprememb se nanaša na posodobitev kode, specifične za strojne arhitekture, 12% se nanaša na omrežno kupolo, 4% na datotečne sisteme in 3% na notranje pod sisteme jedra.

Ključne novosti v jedru 6.2:

  • Pomnilnik in sistemske storitve
    • Dovoljen je sprejem kode in sprememb v jedro, dostavljenih pod licenco Copyleft-Next 0.3.1. Licenca Copyleft-Next je bila ustvarjena od enega od avtorjev GPLv3 in je popolnoma združljiva z licenco GPLv2, kar potrjujejo pravniki podjetij SUSE in Red Hat. V primerjavi z GPLv2 je licenca Copyleft-Next znatno bolj kompaktna in enostavna za razumevanje (uvodne dele in omembe zastarekompromisov je odstranila), določa roke in postopek za odpravo kršitev, samodejno odstrani kopilfift zahteve za zastare, starejše od 15 let.

      Copyleft-Next vsebuje tudi klavzulo o podelitvi pravic na patentiranih tehnologijah, kar pa, za razliko od GPLv2, to licenco naredi združljivo z licenco Apache 2.0. Za zagotovitev popolne združljivosti z GPLv2 v besedilu Copyleft-Next izrecno navaja, da lahko izpeljana dela izdajemo ne le pod izvorno licenco Copyleft-Next, ampak tudi pod licenco GPL.

    • Vključuje orodje „rv“, ki zagotavlja vmesnik za interakcijo iz uporabniškega prostora z obdelovalci sistema RV (Runtime Verification), ki je zasnovan za preverjanje pravilnosti delovanja na visoko zanesljivih sistemih, ki zagotavljajo odpravo napak. Preverjanje poteka med izvajanjem z vezanjem obdelovalcev na točke sledenja, ki primerjajo dejanski potek izvajanja s vnaprej določeno standardno deterministično modeli avtomata, ki določa pričakovano vedenje sistema.
    • V napravi zRAM, ki omogoča shranjevanje delitve za zamenjavo v pomnilniku v kompresirani obliki (v pomnilniku se ustvari blokovna naprava, na katero poteka zamenjava z kompresijo), je omogočeno ponovno pakiranje strani z uporabo alternativnega algoritma za dosego višje ravni kompresije. Osnovna ideja je omogočiti izbiro med več algoritmi (lzo, lzo-rle, lz4, lz4hc, zstd), ki ponujajo svoje kompromise med hitrostjo kompresije/razpakiranja in ravnjo kompresije ali optimalnimi v posebnih situacijah (na primer za kompresijo velikih strani pomnilnika).
    • Dodana je API „iommufd“ za upravljanje iz uporabniškega prostora s sistemom upravljanja pomnilnika vhodno-izhodne naprave — IOMMU (I/O Memory-Management Unit). Nov API omogoča upravljanje s tabelami strani za vhod/izhod pomnilnika z uporabo datotečnih descriptorjev.
    • V BPF je omogočeno ustvarjanje tipov, določanje lastnih objektov, grajenje svoje hierarhije objektov in fleksibilno oblikovanje lastnih podatkovnih struktur, kot so povezani seznami. Za BPF programe, ki prehajajo v stanje spanja (BPF_F_SLEEPABLE), je dodana podpora za zaklepanje bpf_rcu_read_{,un}lock(). Uvedena je podpora za shranjevanje objektov task_struct. Dodan je tip mape BPF_MAP_TYPE_CGRP_STORAGE, ki ponuja lokalno shrambo za cgroups.
    • Za mehanizem zaklepanja RCU (Read-copy-update) je bil uveden optionalni mehanizem „lenih“ povratnih klicev, v katerem se prek časovnika v paketnem načinu hkrati obdeluje več povratnih klicev. Uporaba predlagane optimizacije omogoča znižanje porabe energije na napravah Android in ChromeOS za 5-10 % z odlašanjem RCU zahtevkov med časom mirovanja ali nizkim obremenitvijo sistema.
    • Додан sysctl split_lock_mitigate за управување со реакцијата на системот при откривање на разделени заклучувања («split lock»), кои се јавуваат при пристап до неравномерно распоредени податоци во меморијата поради фактот што при извршување на атомарна инструкција податоците ја преминуваат двете кеш линии на процесорот. Овие заклучувања доведуваат до значително намалување на перформансите. Кога ќе се постави вредноста 0 во split_lock_mitigate, ќе се прикаже само предупредување за постоење на проблем, а при поставување на вредност 1, покрај предупредувањето, ќе се ограничи извршувањето на процесот што го предизвика заклучувањето, за да се зачуваат перформансите на остатокот од системот.
    • За архитектурата PowerPC предложена е нова имплементација на заклучоците qspinlock, која демонстрира повисоки перформанси и решава некои проблеми со заклучоци кои се појавуваат во невообичаени случаи.
    • Преработен е кодот за обработка на прекини MSI (Message-Signaled Interrupts), во кој се решени натрупаните архитектонски проблеми и додадена поддршка за поврзување на индивидуални обработувачи со различни уреди.
    • За системите базирани на архитектурата на команден сет LoongArch, применета во процесорите Loongson 3 5000 и која имплементира нов RISC ISA сличен на MIPS и RISC-V, реализирана е поддршка за ftrace, заштита на стекот, спијачки и чекање режим.
    • Обезбедена е можност за доделување имиња на области на споделена анонимна меморија (претходно, имената можеа да се доделуваат само на приватна анонимна меморија, поврзана со конкретен процес).
    • Додаден е нов параметар на командната линија на ядро ‘‘trace_trigger’’, наменет за активирање на тригер за трасирање, кој се користи за поврзување на условни команди активирани при активирање на проверка (на пример, trace_trigger=‘‘sched_switch.stacktrace if prev_state == 2’’).
    • Поставени се повисоки барања за верзијата на пакетот binutils. За изработка на јадрото сега е потребно најмалку binutils 2.25.
    • При повикување на exec() додадена е опцијата за ставање на процесот во просторот на времето (time namespace), во кој времето се разликува од системското.
    • Začel se je prenos iz veje Rust-for-Linux dodatne funkcionalnosti, povezane z uporabo jezika Rust kot drugega jezika za razvoj gonilnikov in modulov jedra. Podpora za Rust je privzeto neaktivna in ne pomeni vključitve Rust-a med obvezne kompilacijske odvisnosti jedra. Predlagana osnovna funkcionalnost iz prejšnje različice je razširjena s funkcionalnostmi za podporo nizkolegacijske kode, kot so tip Vec in makroji pr_debug!(), pr_cont!() in pr_alert!(), ter proceduralni makro „#[vtable]“, ki poenostavi delo s tabelami kazalcev na funkcije. Dodajanje visokonivojskih Rust-ovih obvez potrebnih za razvoj polnih gonilnikov v Rust-u je predvideno v naslednjih izdajah.
    • Tip „char“, ki se uporablja v jedru, je zdaj za vse arhitekture privzeto razglašen za brezznakoven.
    • Mehanizem dodeljevanja pomnilnika slab - SLOB (slab allocator), ki je bil zasnovan za sisteme z malo pomnilnika, je razglašen za zastarelega. Namesto SLOB-a se v običajnih razmerah priporoča uporaba SLUB ali SLAB. Za sisteme z malo pomnilnika se priporoča uporaba SLUB-a v načinu SLUB_TINY.
  • Дисковая подсистема, ввод/вывод и файловые системы
    • V Btrfs so bile narejene izboljšave, usmerjene v odpravo težave z „write hole“ v implementaciji RAID 5/6 (poskus obnovitve RAID-a, če do napake pride med zapisovanjem in ni mogoče razumeti, kateri blok je bil pravilno zabeležen na katerem od RAID naprav, kar lahko privede do uničenja blokov, ki ustrezajo nedoseženim blokom). Poleg tega je za SSD zdaj privzeto samodejno aktivirana asinkrona izvedba operacije „discard“, ki omogoča višjo zmogljivost zaradi učinkovitega grupiranja operacij „discard“ v čakalni vrsti ter obdelave čakalne vrste z ozadnjim obdelovalnikom. Povečana je zmogljivost operacij send in lseek ter ioctl FIEMAP.
    • Razširjene so možnosti upravljanja s predponočno zapisovanjem (writeback, ozadnje shranjevanje spremenjenih podatkov) za blokne naprave. V nekaterih situacijah, na primer pri uporabi omrežnih bloknih naprav ali USB pomnilnikov, lahko predponočno zapisovanje povzroči veliko porabo pomnilnika. Da bi obvladovali vedenje predponočnega zapisovanja in ohranili velikost straničnega predpomnilnika znotraj določenih okvirjev v sysfs (\/sys\/class\/bdi\/) so uvedeni novi parametri strict_limit, min_bytes, max_bytes, min_ratio_fine in max_ratio_fine.
    • V datotečnem sistemu F2FS je bila izvedena ioctl-operacija atomske zamenjave, ki omogoča zapisovanje podatkov v datoteko v okviru ene atomske operacije. V F2FS je bil dodan tudi blokovni predpomnilnik ekstentov, ki pomaga določiti aktivno uporabljene podatke ali podatke, do katerih že dolgo ni bilo dostopa.
    • V FS ext4 je bila izvedena le popravila napak.
    • V datotečnem sistemu ntfs3 je bilo predlaganih več novih možnosti za montažo: „nocase“ za upravljanje upoštevanja velike in male črke v imenih datotek in direktorijev; windows_name za prepoved ustvarjanja imen datotek, ki vsebujejo znake, ki niso dovoljeni v operacijskem sistemu Windows; hide_dot_files za upravljanje dodeljevanja oznake skritih datotek za datoteke, ki se začnejo s piko.
    • V datotečnem sistemu Squashfs je bila uvedena možnost montaže „threads=“, s katero lahko določite število niti za paralelizacijo operacij razpakiranja. V Squashfs je tudi omogočena možnost preslikavanja identifikatorjev uporabnikov montiranih datotečnih sistemov, ki se uporablja za ujemanje datotek določenega uporabnika na montirani tujskem delu z drugim uporabnikom v trenutnem sistemu.
    • Preoblikovana je bila izvedba seznamov nadzora dostopa POSIX (POSIX ACL). V novi izvedbi so bile odpravljene arhitekturne težave, poenostavljeno vzdrževanje kode in vključene bolj varne vrste podatkov.
    • V podsistem fscrypt, ki se uporablja za prozorno šifriranje datotek in imenikov, je bila dodana podpora za šifrirni algoritem SM4 (kitajski standard GB\/T 32907-2016).
    • Omogočena je bila sestava jedra brez podpore za NFSv2 (v prihodnosti načrtujejo popolno opustitev podpore za NFSv2).
    • Spremenjena je organizacija preverjanja dostopa do naprav NVMe. Omogočeno je branje in pisanje na napravo NVMe, če ima postopek pisanja dostop do posebne datoteke naprave (prej je moral postopek imeti pooblastilo CAP_SYS_ADMIN).
    • Odstranjen je paketni gonilnik za CD/DVD, ki je bil razglašen za zastarelo leta 2016.
  • Virtualizacija in varnost
    • Uveden je nov način zaščite pred ranljivostjo Retbleed v CPU Intel in AMD, ki uporablja sledenje globini klicev, kar ne upočasnjuje delovanja tako kot prejšnja zaščita pred Retbleed. Za omogočitev novega načina je predlagana možnost ukazne vrstice jedra „retbleed=stuff“.
    • Dodano je hibridno zaščito za izvajanje ukaza FineIBT, ki združuje uporabo strojnih navodil Intel IBT (Indirect Branch Tracking) in programske zaščite kCFI (kernel Control Flow Integrity) za preprečitev kršitve normalnega zaporedja izvajanja (control flow) kot rezultat uporabe izkoriščanj, ki spreminjajo kazalce funkcij, shranjene v pomnilniku. FineIBT omogoča izvajanje prek posrednega skoka le, kadar se sklicuje na ukaz ENDBR, ki je postavljen na začetku funkcije. Poleg tega se, po analogiji s kCFI mehanizmom, izvede preverjanje hashov, ki zagotavljajo nespremenljivost kazalcev.
    • Dodane so omejitve za blokiranje napadov, ki manipulirajo z generacijo stanj „oops“, po katerih se problematične naloge končajo in stanje se obnovi brez zaustavitve delovanja sistema. Pri zelo velikem številu klicev stanja „oops“ pride do prekoračitve števca sklicev (refcount), kar omogoča izkoriščanje ranljivosti, povzročenih z dereferenciranjem NULL kazalcev. Za zaščito pred takšnimi napadi je v jedro dodana omejitev na največje število sprožitev „oops“, po katerih jedro sproži prehod v stanje „panic“ z naknadnim ponovnim zagonom, kar ne omogoča dosego števila iteracij, potrebnih za prekoračitev refcount. Privzeta omejitev je nastavljena na 10.000 „oops“, vendar jo je mogoče po želji spremeniti s parameter oops_limit.
    • Dodana je konfiguracijska parametar LEGACY_TIOCSTI i sysctl legacy_tiocsti za isključivanje mogućnosti unos podataka u terminal putem ioctl TIOCSTI, jer se ta funkcionalnost može koristiti za umetanje proizvoljnih znakova u ulazni bafer terminala i simulaciju korisničkog unosa.
    • Predložen je novi tip unutarnjih struktura encoded_page, gdje se donji bitovi pokazivača koriste za pohranu dodatnih informacija koje se primjenjuju protiv slučajnog dereferenciranja pokazivača (u stvarnoj potrebi dereferenciranja, prvo treba očistiti te dodatne bitove).
    • Na ARM64 platformi u fazi pokretanja omogućena je opcija uključivanja i isključivanja softverske implementacije mehanizma Shadow Stack, koja se koristi za zaštitu od prepisivanja adrese povratka iz funkcije u slučaju preljeva bafera na steku (suština zaštite je očuvanje adrese povratka, koja se prenosi u odvojenom „senčnom“ steku, i vađenje te adrese prije izlaska iz funkcije). Podrška u jednoj verziji jezgre za hardversku i softversku implementaciju Shadow Stack omogućava korištenje iste jezgre na različitim ARM sistemima, neovisno o podršci za instrukcije za autentifikaciju pokazivača. Uključivanje softverske implementacije ostvaruje se zamjenom potrebnih instrukcija u kodu tokom pokretanja.
    • Dodana je podrška za korištenje mehanizma asinkronog obavještenja o izlasku (asynchronous exit notification) na Intel procesorima, koji omogućava otkrivanje single-step napada na kod koji se izvršava u SGX okruženjima.
    • Predložen je skup operacija koji omogućava hipervizoru podršku zahtjevima iz Intel TDX (Trusted Domain Extensions) gostovskih sistema.
    • Uklonjene su postavke za sastavljanje jezgre RANDOM_TRUST_BOOTLOADER i RANDOM_TRUST_CPU, umjesto kojih se trebaju koristiti odgovarajuće opcije komandne linije random.trust_bootloader i random.trust_cpu.
    • U mehanizam Landlock, koji omogućava ograničavanje interakcije grupe procesa s vanjskim okruženjem, dodana je podrška za zastavicu LANDLOCK_ACCESS_FS_TRUNCATE, koja omogućava kontrolu nad izvršavanjem operacija skraćivanja datoteka.
  • Mrežna podsistem
    • Za IPv6 je dodana podpora za PLB (Protective Load Balancing), mehanizem uravnoteženja obremenitev med omrežnimi povezavami, ki je usmerjen v zmanjšanje točk preobremenitve na stikalo v podatkovnih centrih. S spremembo IPv6 Flow Label PLB naključno spreminja poti paketov za uravnoteženje obremenitev na vrata stikala. Da bi zmanjšali preurejanje paketov, se ta operacija po možnosti izvaja po obdobjih neaktivnosti (idle). Uporaba PLB v podatkovnih centrih Google je omogočila povprečno zmanjšanje nerazporejenosti obremenitve na vratih stikal za 60 %, zmanjšanje izgube paketov za 33 % in zmanjšanje zakasnitve za 20 %.
    • Dodana je gonilna programska oprema za naprave MediaTek s podporo za Wi-Fi 7 (802.11be).
    • Dodana je podpora za 800-gigabitne povezave.
    • Dodana je možnost preimenovanja omrežnih vmesnikov med delovanjem, brez ustavljanja dela.
    • V zapisih dnevnika o SYN poplavah je dodano omembe IP naslova, na katerega je prišel paket.
    • Za UDP je bila реализована možnost uporabe ločenih hash tabel za različna omrežna imenska prostora.
    • Za omrežne mostove je bila реализirana podpora za metodo avtentikacije MAB (MAC Authentication Bypass).
    • Za protokol CAN (CAN_RAW) je bila реализirana podpora za način soketov SO_MARK za pripenjanje filtrov prometa na podlagi fwmark.
    • V ipset je bila реализirana nova možnost bitmask, ki omogoča določitev maske na osnovi poljubnih bitov v IP naslovu (na primer, "ipset create set1 hash:ip bitmask 255.128.255.0").
    • V nf_tables je dodana podpora za obdelavo notranjih (inner) naslovov, ki gredo znotraj tuneliranih paketov.
  • Oprema
    • Dodana je podsystems 'accel' z implementacijo okvira za pospeševalnike izračunov, ki so lahko na voljo tako v obliki ločenih ASIC, kot tudi v obliki IP blokov znotraj SoC in GPU. Take pospeševalnike predvsem usmerjene v pospeševanje reševanja nalog strojnega učenja.
    • V gonilniku amdgpu je vključena podpora za IP komponente GC, PSP, SMU in NBIO. Za sisteme ARM64 je bila реализirana podpora za DCN (Display Core Next). Izvedba zaščitenega izhoda na zaslon je bila prenesena z uporabo DCN10 na DCN21 in se zdaj lahko uporablja pri povezovanju več zaslonov.
    • V gonilniku i915 (Intel) je bila stabilizirana podpora za diskretne grafične kartice Intel Arc (DG2/Alchemist).
    • V gonilniku Nouveau je bila реализirana podpora za GPU NVIDIA GA102 (RTX 30) na osnovi arhitekture Ampere. Za kartice nva3 (GT215) je dodana možnost nadzora osvetlitve ozadja.
    • Dodana je podrška za bežične adaptere na bazi čipova Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) i MediaTek MT7996, Bluetooth interfejsa Broadcom BCM4377/4378/4387, kao i Ethernet kontrolera Motorcomm yt8521, NVIDIA Tegra GE.
    • Dodana je podrška za ASoC (ALSA System on Chip) za ugrađene zvučne čipove HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Dodana je podrška za zvučni interfejs Focusrite Saffire Pro 40. Dodan je zvučni kodek Realtek RT1318.
    • Dodana je podrška za pametne telefone i tablete Sony (Xperia 10 IV, 5 IV, X i X compact, OnePlus One, 3, 3T i Nord N100, Xiaomi Poco F1 i Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • Dodana je podrška za ARM SoC i Apple platforme T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695), SDM670 (Snapdragon 670), MSM8976 (Snapdragon 652), MSM8956 (Snapdragon 650), RK3326 Odroid-Go/rg351, Zyxel NSA310S, InnoComm i.MX8MM, Odroid Go Ultra.

Istovremeno, Latinskoamerički Fond za slobodan softver formirao je verziju potpuno slobodnog jezgra 6.2 — Linux-libre 6.2-gnu, očišćenog od elemenata firmvera i drajvera koji sadrže neslobodne komponente ili delove koda čija je upotreba ograničena od strane proizvođača. U novom izdanju izvršena je pročišćenje novih blobova u drajveru nouveau. Isključeno je učitavanje blobova u drajverima mt7622, mt7996 wifi i bcm4377 bluetooth. Izvršena je pročišćenje imena blobova u dts datotekama za arhitekturu Aarch64. Ažuriran je kod pročišćenja blobova u raznim drajverima i podsistemima. Prekinuta je pročišćenje drajvera s5k4ecgx, budući da je uklonjen iz jezgra.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster