Linux 6.2 kodola atbrīvošana

Pēc diviem mēnešiem izstrādes Linuss Torvalds ir prezentējis Linux 6.2 kodola atbrīvošanu. Starp visredzamākajām izmaiņām: ir atļauts pieņemt kodu ar Copyleft-Next licenci, uzlabota RAID5/6 realizācija Btrfs, turpināta atbalsta integrācija Rust valodai, samazinātas izmaksas uzbrukumu pret Retbleed aizsardzībā, pievienota iespēja regulēt atmiņas patēriņu norakstīšanas laikā, TCP pievienots PLB (Protective Load Balancing) līdzsvarošanas mehānisms, pievienots hibrīdais izpildes komandu aizsardzības mehānisms (FineIBT), BPF ir iegūta iespēja definēt savus objektus un datu struktūras, iekļauta rv (Runtime Verification) utilīta, samazināts enerģijas patēriņš RCU bloķēšanas realizācijā.

Jaunajā versijā ir pieņemti 16843 labojumi no 2178 izstrādātājiem, plākstere ir 62 MB (izmaiņas skāra 14108 failus, pievienoti 730195 koda rindiņas, dzēstas 409485 rindiņas). Apmēram 42% no visām izmaiņām 6.2 versijā ir saistītas ar ierīču vadītājiem, aptuveni 16% izmaiņas ir saistītas ar aparatūras arhitektūrām specifisku koda atjauninājumu, 12% ir saistītas ar tīkla kaudzes izmaiņām, 4% - ar failu sistēmām un 3% ar iekšējām kodola subsistēmām.

Galvenās jaunās iezīmes kodolā 6.2:

  • Atmiņa un sistēmas pakalpojumi
    • Atļauts iekļaut kodola sastāvā kodu un izmaiņas, kas tiek piegādātas ar Copyleft-Next 0.3.1 licenci. Copyleft-Next licence ir izstrādāta no GPLv3 autoriem un ir pilnībā saderīga ar GPLv2 licenci, ko apstiprinājušas SUSE un Red Hat uzņēmumu juristi. Salīdzinot ar GPLv2, Copyleft-Next licence ir ievērojami kompakta un vieglāk saprotama (noņemta ievada daļa un atsauce uz novecojušiem kompromisiem), nosaka termiņus un kārtību pārkāpumu novēršanai, automātiski atceļ kopēšanas prasības novecojušam kodam, kas ir vecāks par 15 gadiem.

      Copyleft-Next arī satur punktu par patenta tehnoloģiju tiesību piešķiršanu, kas, atšķirībā no GPLv2, padara šo licenci saderīgu ar Apache 2.0 licenci. Lai nodrošinātu pilnīgu saderību ar GPLv2, Copyleft-Next tekstā skaidri norādīts, ka atvasinātais darbs var tikt piegādāts ne tikai ar sākotnējo Copyleft-Next licenci, bet arī ar GPL licenci.

    • Komplektā iekļauta utilīta «rv», kas nodrošina interfeisu, lai lietotāja telpā mijiedarbotos ar RV (Runtime Verification) apakšsistēmas apstrādātājiem, kas paredzēti, lai pārbaudītu pareizu darbību augstas uzticamības sistēmās, garantējot bezavāriju darbību. Pārbaude notiek izpildes laikā, pievienojot apstrādātājus izsekošanas punktiem, salīdzinot faktisko izpildes gaitu ar iepriekš noteiktu atsauces deterministisko automāta modeli, kas nosaka sistēmas gaidāmo uzvedību.
    • ZRAM ierīcē, kas ļauj glabāt swap nodalījumu atmiņā saspiestā veidā (atmiņā tiek izveidots bloku ierīce, uz kuru tiek veikta swapēšana, izmantojot saspiešanu), īstenota iespēja pārsaiņot lapas, izmantojot alternatīvu algoritmu, lai sasniegtu augstāku saspiešanas līmeni. Pamatideja ir nodrošināt izvēli starp vairākiem algoritmiem (lzo, lzo-rle, lz4, lz4hc, zstd), kas piedāvā kompromisus starp saspiešanas/izsaspiešanas ātrumu un saspiešanas līmeni vai optimālus īpašās situācijās (piemēram, lappušu saspiešanai lielas atmiņas ietvaros).
    • Pievienots API «iommufd» ieejas-izejas atmiņas vadības sistēmas pārvaldībai no lietotāja telpas — IOMMU (I/O Memory-Management Unit). Jaunais API ļauj pārvaldīt ieejas-izejas atmiņas lapu tabulas, izmantojot failu aprakstus.
    • BPF piedāvā iespēju veidot tipus, definēt savus objektus, veidot savu objektu hierarhiju un elastīgi veidot savas datu struktūras, piemēram, saistītās sarakstus. BPF programmām, kas pāriet miega režīmā (BPF_F_SLEEPABLE), pievienota atbalsta blokāde bpf_rcu_read_{,un}lock(). Ieviests map-tips BPF_MAP_TYPE_CGRP_STORAGE, kas nodrošina vietējo glabāšanu cgroups.
    • RCU (Read-copy-update) bloķēšanas mehānismam ieviests izvēles «kavētu» atgriešanas zvanu mehānisms, kurā pēc taimerim noteikta laika partijas režīmā vienlaikus tiek apstrādāti vairāki atgriešanas zvanu izsaukumi. Ieteiktās optimizācijas izmantošana ļauj par 5-10% samazināt enerģijas patēriņu Android un ChromeOS ierīcēs, atlikt RCU pieprasījumus aktīva vai zemas slodzes sistēmas laikā.
    • Pievienots sysctl split_lock_mitigate, lai pārvaldītu sistēmas reakciju uz sadalītām bloķēšanām («split lock»), kas rodas, piekļūstot neizlīdzinātiem datiem atmiņā, jo, veicot atomisku instrukciju, dati šķērso divas CPU keša līnijas. Šādas bloķēšanas rada būtisku veiktspējas samazinājumu. Iestādot split_lock_mitigate vērtību 0, tiek izvadīts brīdinājums par problēmu, bet, iestādot vērtību 1, iznāk brīdinājums un tiešā procesa, kas izraisījis bloķēšanu, izpilde tiek palēnināta, lai saglabātu pārējās sistēmas veiktspēju.
    • PowerPC arhitektūrai piedāvāta jauna qspinlock bloķēšanas realizācija, kas nodrošina augstāku veiktspēju un atrisina dažas neaizsargātības problēmas bloķēšanās gadījumos.
    • Pārstrādāta MSI (Message-Signaled Interrupts) pārtraukuma apstrādes kods, kurā novērstas uzkrātās arhitektūras problēmas un pievienota atbalsts atsevišķu apstrādātāju piesaistīšanai dažādām ierīcēm.
    • LoongArch komandu komplektu arhitektūrai, kas izmantota Loongson 3 5000 procesoros un realizē jauno RISC ISA, kas ir līdzīgs MIPS un RISC-V, ieviesta ftrace, steka aizsardzība un miega un gaidīšanas režīmu atbalsts.
    • Tika nodrošināta iespēja piešķirt nosaukumus kopējās anonīmās atmiņas jomām (iepriekš nosaukumi varēja tikt piešķirti tikai privātajai anonīmajai atmiņai, kas piešķirta konkrētam procesam).
    • Pievienots jauns kodola komandu rindu parametrs «trace_trigger», kas paredzēts, lai aktivizētu izsekošanas trigeri, ko izmanto nosacītu komandu piesaistīšanai, kas tiek izsauktas, kad tiek aktivizēta kontroles pārbaude (piemēram, trace_trigger=»sched_switch.stacktrace if prev_state == 2″).
    • Palielinātas prasības binutils pakotnes versijai. Tagad kodola salikšanai nepieciešama vismaz binutils 2.25.
    • Izsaucot exec(), pievienota iespēja ievietot procesu laika nosacījumu telpā (time namespace), kurā laiks atšķiras no sistēmas.
    • Sākusies pāreja no zara Rust-for-Linux papildu funkcionalitātes, saistītas ar Rust valodas izmantošanu kā otro valodu ierīču un kodola moduļu izstrādē. Atbalsts Rust pēc noklusējuma nav aktīvs un nenoved pie Rust iekļaušanas obligātajās atkarībās kodolā. Iepriekšējā izlaidumā piedāvātā pamatfunkcionalitāte ir paplašināta ar iespējām, kas atbalsta zema līmeņa kodu, piemēram, tipu Vec un makrosiem pr_debug!(), pr_cont!() un pr_alert!(), kā arī procedūras makrosu „#[vtable]”, kas atvieglo darbu ar funkciju norādītāju tabulām. Gaida augsta līmeņa Rust savienojumu pievienošanu kodola apakšsistēmām, kas ļaus izstrādāt pilnvērtīgus draiverus Rust, nākamajos izlaidumos.
    • Kodola izmantojamais tips „char” tagad visām arhitektūrām pēc noklusējuma ir pasludināts par bezzīmju.
    • Ir atzīts par novecojušu atmiņas sadales mehānisms slab — SLOB (slab allocator), kas tika projektēts sistēmām ar nelielu atmiņas apjomu. Parasti ieteicams izmantot SLUB vai SLAB vietā SLOB. Sistēmām ar nelielu atmiņas apjomu ieteicams izmantot SLUB režīmā SLUB_TINY.
  • Disku apakšsistēma, I/O un failu sistēmas
    • Btrfs ir veikti uzlabojumi, kuru mērķis ir novērst problēmu ar „write hole” RAID 5/6 īstenojumā (mēģinājums atjaunot RAID, ja avārija notika ieraksta laikā un nav iespējams saprast, kurš bloks kurā RAID ierīcē tika ierakstīts pareizi, kas var novest pie bloku iznīcināšanas, kas atbilst neierakstītajiem blokiem). Turklāt tagad SSD ir iespējams automātiski aktivizēt pēc noklusējuma asinkronās „discard” operācijas izpildi, kas ļauj sasniegt augstāku veiktspēju, efektīvi grupējot „discard” operācijas rindā un apstrādājot to ar fona apstrādātāju. Tika palielināta send un lseek operāciju, kā arī ioctl FIEMAP veiktspēja.
    • Ir paplašinātas iespējas pārvaldīt atliktās rakstīšanas (writeback, fona saglabāšanu mainītajos datos) funkcijas bloku ierīcēm. Dažās situācijās, piemēram, izmantojot tīkla bloku ierīces vai USB zibatmiņas, atliktā rakstīšana var radīt lielu operatīvās atmiņas patēriņu. Lai pārvaldītu atliktās rakstīšanas uzvedību un uzturētu lapu kešatmiņas izmēru noteiktās robežās, sysfs (\/sys\/class\/bdi\/) ir pievienoti jauni parametri strict_limit, min_bytes, max_bytes, min_ratio_fine un max_ratio_fine.
    • Failu sistēmā F2FS ieviesta ioctl operācija atomiskai nomaiņai, kas ļauj ierakstīt datus failā vienas atomiskas operācijas ietvaros. F2FS arī pievienots bloku kešs ekstentiem, kas palīdz identificēt aktīvi izmantotos datus vai datus, kuriem ilgstoši nav bijusi piekļuve.
    • Failu sistēmā ext4 tiek atzīmētas tikai kļūdu labojumi.
    • Failu sistēmā ntfs3 ir piedāvātas vairākas jaunas montēšanas opcijas: „nocase” simbolu reģistra uzskaites pārvaldībai failu un katalogu nosaukumos; windows_name, lai aizliegtu fails ar nosaukumiem, kas satur simbolus, kas nav pieļaujami OS Windows; hide_dot_files, lai pārvaldītu slēpto failu marķēšanu failiem, kas sākas ar punktu.
    • Failu sistēmā Squashfs ieviesta montēšanas opcija „threads=”, ar kuru var noteikt pavedienu skaitu operāciju paralelizēšanai. Squashfs ir arī iespēja veikt lietotāju identifikatoru kartēšanu pievienotajās failu sistēmās, kas tiek izmantota, lai salīdzinātu konkrēta lietotāja failus pievienotajā citā nodalījumā ar citu lietotāju pašreizējā sistēmā.
    • Pārstrādāta POSIX piekļuves kontroles sarakstu (POSIX ACL) īstenošana. Jaunajā īstenošanā ir novērstas arhitektūras problēmas, vienkāršota koda uzturēšana un izmantoti drošāki datu veidi.
    • Uz fscrypt apakšsistēmu, kas tiek izmantota, lai caurspīdīgi šifrētu failus un katalogus, pievienota atbalsts šifrēšanas algoritmam SM4 (Ķīnas standarts GB\/T 32907-2016).
    • Tiek nodrošināta iespēja kompilēt kodolu bez NFSv2 atbalsta (nākotnē plānots pilnībā atteikt atbalstu NFSv2).
    • Ir mainīta piekļuves tiesību pārbaudes organizācija NVMe ierīcēm. Tagad ir iespēja lasīt un rakstīt uz NVMe ierīci, ja rakstīšanas process ir piekļuvis īpašam ierīces failam (iepriekš procesam bija jābūt CAP_SYS_ADMIN pilnvarām).
    • Tika noņemts CD/DVD pakotņu vadītājs, kas tika pasludināts par novecojušu 2016. gadā.
  • Virtualizācija un drošība
    • Ieviešots jauns aizsardzības mehānisms pret Retbleed ievainojamību Intel un AMD CPU, kas izmanto izsaukumu dziļuma izsekošanu un nav tik lēns kā iepriekšējā Retbleed aizsardzība. Lai aktivizētu jauno režīmu, piedāvāts komandrindas parametra "retbleed=stuff".
    • Pievienots hibrīda mehānisms aizsardzībai pret izpildes plūsmas pārtraukumiem FineIBT, apvienojot Intel IBT (Indirect Branch Tracking) aparatūras instrukcijas un programmatūras aizsardzību kCFI (kernel Control Flow Integrity) lai bloķētu normālas izpildes kārtības (control flow) pārkāpumus, ko izraisa exploiti, kas maina atmiņā saglabātos funkciju rādītājus. FineIBT ļauj veikt pāreju tikai tad, ja tā ir uz ENDBR instrukciju, kas ir izvietota paša funkcijas sākumā. Papildus, līdzīgi kā kCFI mehānismā, tiek veikta hešu pārbaude, garantējot rādītāju nemainīgumu.
    • Tika pievienoti ierobežojumi, lai bloķētu uzbrukumus, kas manipulē ar "oops" stāvokļa ģenerēšanu, pēc kuriem problemātiskie uzdevumi tiek pārtraukti un stāvoklis tiek atjaunots bez sistēmas pārtraukumiem. Ar ļoti lielu "oops" stāvokļa izsaukumu skaitu rodas atsauces skaitītāja (refcount) pārplūde, kas ļauj izmantot ievainojamības, ko izraisa NULL rādītāju dereferencēšana. Lai aizsargātu pret šādiem uzbrukumiem, kodolā tika pievienots limits uz maksimālo "oops" gadījumu skaitu, pēc kura pārsniegšanas kodols uzsāks pāreju uz "panic" stāvokli ar sekojošu restartēšanu, tādējādi nepieļaujot sasniegt iterāciju skaitu, kas nepieciešams refcount pārplūdei. Noklusējuma limits ir 10 tūkstoši "oops", taču to var mainīt, izmantojot oops_limit parametru.
    • Tika pievienots konfigurācijas parametrs LEGACY_TIOCSTI un sysctl legacy_tiocsti, lai atslēgtu iespēju ievietot datus terminālī, izmantojot ioctl TIOCSTI, jo šī funkcionalitāte var tikt izmantota, lai ievietotu patvaļīgus simbolus termināla ievades buferī un simulētu lietotāja ievadi.
    • Ierosināts jauns iekšējo struktūru veids encoded_page, kurā apakšējie rādītāja bitu tiek izmantoti, lai saglabātu papildu informāciju, kas tiek izmantota, lai aizsargātu pret nejaušu rādītāja atsauci (ja nepieciešama reāla atsauce, vispirms jāiztīra šie papildu biti).
    • ARM64 platformā ielādēšanas laikā nodrošināta iespēja ieslēgt un izslēgt Shadow Stack mehānisma programmatūras īstenojumu, ko izmanto, lai aizsargātu pret atgriešanās adreses pārrakstīšanu funkcijas izsaukšanas laikā sakarā ar bufera pārpildīšanu (aizsardzības būtība ir saglabāt pēc funkcijas vadības nodošanas atgriešanās adresi atsevišķā "ēnu" stekā un iegūt šo adresi pirms iznākšanas no funkcijas). Atbalsts vienā kodola izlaidumā gan aparatūras, gan programmatūras Shadow Stack īstenošanai ļauj izmantot vienu kodolu dažādās ARM sistēmās, neatkarīgi no norādījumu atbalsta rādītāju autentifikācijai. Programmatūras īstenošana tiek aktivizēta, aizstājot nepieciešamās instrukcijas kodā palaišanas laikā.
    • Pievienots atbalsts Intel procesoros asinchroniskās izejas paziņošanas mehānisma izmantošanai, kas ļauj atklāt single-step uzbrukumus uz kodu, kas tiek izpildīts SGX enclave.
    • Ierosināts darbību kopums, kas ļauj hipervizoram atbalstīt pieprasījumus no Intel TDX (Trusted Domain Extensions) viesu sistēmām.
    • Noņemti kodola iestatījumi RANDOM_TRUST_BOOTLOADER un RANDOM_TRUST_CPU, tā vietā jāizmanto attiecīgās komandrindas opcijas random.trust_bootloader un random.trust_cpu.
    • Landlock mehānismā, kas ļauj ierobežot grupas procesu mijiedarbību ar ārējo vidi, pievienots atbalsts FLAG LANDLOCK_ACCESS_FS_TRUNCATE, kas ļauj kontrolēt failu truncēšanas operāciju izpildi.
  • Tīkla subsistēma
    • IPv6 atbalsts ir pievienots PLB (Aizsargājošais slodzes sadalījums), slodzes sadales mehānismam starp tīkla saiknēm, kura mērķis ir samazināt pārslodzes punktus datu centru slēgšanas iekārtās. Izmantojot IPv6 Flow Label, PLB nejauši maina paketu ceļus, lai izlīdzinātu slodzi slēdžu portos. Lai samazinātu paketu pārkārtošanu, šī operācija, cik iespējams, notiek pēc dīkstāves periodiem. PLB izmantošana Google datu centros ir ļāvusi samazināt nelīdzsvarotību slodzē uz slēdžu portiem vidēji par 60%, samazināt paketu zudumus par 33% un samazināt aizkavēšanos par 20%.
    • Pievienots draiveris MediaTek ierīcēm ar Wi-Fi 7 (802.11be) atbalstu.
    • Pievienots atbalsts 800-gigabitu saitēm.
    • Pievienota iespēja pārsaukt tīkla saskarnes uz vietas, netraucējot darbību.
    • Reģistrētajos žurnāla ziņojumos par SYN plūdiem pievienota atsauce uz IP adresi, uz kuru ieradās pakets.
    • UDP ievieš atsevišķu hash tabulu izmantošanu dažādām tīkla nosaukumu telpām.
    • Tīkla tiltiem ieviests MAB (MAC autentifikācijas apvedceļa) autentifikācijas metode atbalsts.
    • CAN protokolam (CAN_RAW) ieviests SO_MARK tīkla darbības režīms, lai piesaistītu trafika filtrus, pamatojoties uz fwmark.
    • Ipset ieviests jauns parametrs bitmask, kas ļauj norādīt masku, pamatojoties uz jebkuriem bitiem IP adresē (piemēram, "ipset create set1 hash:ip bitmask 255.128.255.0").
    • Nf_tables pievienots atbalsts iekšējo (inner) galviņu apstrādei, kas iet cauri tuneļotajiem pakotnēm.
  • Aprīkojums
    • Pievienota "accel" apakšsistēma ar izpildes ietvara īstenojumu skaitļošanas paātrinātājiem, kas var tikt piedāvāti gan kā atsevišķi ASIC, gan kā IP bloki iekšējā SoC un GPU. Šādi paātrinātāji galvenokārt vērsti uz mašīnmācīšanās uzdevumu risināšanu.
    • Draiverī amdgpu aktivizēts IP komponentu atbalsts GC, PSP, SMU un NBIO. ARM64 sistēmām ieviests DCN (Display Core Next) atbalsts. Aizsargāta izvadīšana uz ekrāna pārnesta no DCN10 uz DCN21 un tagad var tikt izmantota, pieslēdzot vairākus ekrānus.
    • Draiverī i915 (Intel) stabilizēts diskrēto Intel Arc (DG2/Alchemist) grafisko karti atbalsts.
    • Draiverī Nouveau ieviests atbalsts NVIDIA GA102 (RTX 30) GPU, pamatojoties uz Ampere arhitektūru. Nva3 (GT215) kartēm pievienota fona apgaismojuma kontroles iespēja.
    • Pievienota atbalsta bezvadu adapteriem, kas balstīti uz čipiem Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) un MediaTek MT7996, Bluetooth interfeisiem Broadcom BCM4377/4378/4387, kā arī Ethernet kontrolieriem Motorcomm yt8521, NVIDIA Tegra GE.
    • Pievienota ASoC (ALSA System on Chip) atbalsts iebūvētām audio mikroshēmām HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Pievienots audio interfeisa Focusrite Saffire Pro 40 atbalsts. Pievienots audio kodeks Realtek RT1318.
    • Pievienots atbalsts Sony viedtālruņiem un tabletēm (Xperia 10 IV, 5 IV, X un X compact, OnePlus One, 3, 3T un Nord N100, Xiaomi Poco F1 un Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1).
    • Pievienots ARM SoC un Apple plātņu 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 atbalsts.

Tajā pašā laikā Latīņamerikas Brīvā programmatūras fonds izstrādāja pilnīgi brīvā kodola 6.2 - Linux-libre 6.2-gnu variantu, kas attīrīts no elementiem, kas satur slēgtos komponentus vai kodus, kuru lietojums ir ierobežots ražotāja. Jaunajā izlaidumā notika jaunu blobu attīrīšana nouvaul draiverī. Izslēgta blobu ielāde draiveros mt7622, mt7996 wifi un bcm4377 bluetooth. Attīrītas blobu nosaukumi dts-failos Aarch64 arhitektūrai. Atjaunots blobu attīrīšanas kods dažādos draiveros un apakšsistēmās. Attīrīšana draiverim s5k4ecgx pārtraukta, jo tas tika izņemts no koda.

Avots: opennet.lv

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster