Rilascio del kernel Linux 6.2

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.2. Tra le modifiche più significative: è stato consentito l'inserimento di codice sotto licenza Copyleft-Next, migliorata l'implementazione RAID5/6 in Btrfs, proseguita l'integrazione del supporto per il linguaggio Rust, ridotto il sovraccarico nella protezione contro gli attacchi Retbleed, aggiunta la possibilità di regolare il consumo di memoria durante la scrittura inversa, per il TCP è stato introdotto un meccanismo di bilanciamento PLB (Protective Load Balancing), è stato implementato un meccanismo ibrido di protezione del flusso di esecuzione delle istruzioni (FineIBT), in BPF è stata aggiunta la possibilità di definire oggetti e strutture dati personalizzate, è stata inclusa l'utilità rv (Runtime Verification), ed è stato ridotto il consumo energetico nell'implementazione dei lock RCU.

Nella nuova versione sono stati inclusi 16843 fix da 2178 sviluppatori, la dimensione della patch è di 62 MB (le modifiche hanno interessato 14108 file, sono state aggiunte 730195 righe di codice ed eliminate 409485 righe). Circa il 42% di tutte le modifiche presentate in 6.2 riguarda i driver dei dispositivi, circa il 16% delle modifiche è legato all'aggiornamento del codice specifico per architetture hardware, il 12% è correlato allo stack di rete, il 4% ai file system e il 3% ai sottosistemi interni del kernel.

Le principali novità del kernel 6.2:

  • Memoria e servizi di sistema
    • È consentito includere nel kernel codice e modifiche fornite sotto la licenza Copyleft-Next 0.3.1. La licenza Copyleft-Next è stata creata da uno degli autori della GPLv3 ed è completamente compatibile con la licenza GPLv2, come confermato da avvocati delle aziende SUSE e Red Hat. Rispetto alla GPLv2, la licenza Copyleft-Next è nettamente più compatta e più facile da comprendere (è stata rimossa l'introduzione e la menzione di compromessi obsoleti), definisce i termini e le modalità per la risoluzione delle violazioni e revoca automaticamente i requisiti di copyleft per lavori obsoleti, ossia per quelli che hanno più di 15 anni.

      La licenza Copyleft-Next include anche una clausola sulla concessione di diritti su tecnologie brevettate, il che, a differenza della GPLv2, rende questa licenza compatibile con la licenza Apache 2.0. Per garantire la piena compatibilità con la GPLv2, nel testo della Copyleft-Next è esplicitamente indicato che il lavoro derivato può essere fornito non solo sotto la licenza originale Copyleft-Next, ma anche sotto la licenza GPL.

    • La suite include l'utilitaire «rv», che fornisce un'interfaccia per l'interazione dall'utente con i gestori del sottosistema RV (Runtime Verification), progettato per verificare la correttezza del funzionamento in sistemi altamente affidabili, garantendo l'assenza di guasti. Il controllo viene eseguito durante il runtime tramite l'allegazione di gestori a punti di tracciamento, confrontando l'effettivo corso dell'esecuzione con un modello deterministico di automa previamente definito, che determina il comportamento atteso del sistema.
    • Nel dispositivo zRAM, che consente di memorizzare una partizione di swap in memoria in formato compresso (in memoria viene creato un dispositivo a blocchi su cui viene effettuato lo swapping con compressione), è stata implementata la possibilità di ri-imballaggio delle pagine utilizzando un algoritmo alternativo per raggiungere un livello di compressione più elevato. L'idea principale è quella di fornire la scelta tra diversi algoritmi (lzo, lzo-rle, lz4, lz4hc, zstd), che offrono i propri compromessi tra velocità di compressione/decompressione e livello di compressione o sono ottimali in situazioni particolari (ad esempio, per la compressione di grandi pagine di memoria).
    • Aggiunto l'API «iommufd» per la gestione dallo spazio utente del sistema di gestione della memoria di input/output — IOMMU (Unità di Gestione della Memoria di I/O). La nuova API consente la gestione delle tabelle delle pagine di memoria di input/output, utilizzando dei file descriptor.
    • In BPF è stata fornita la possibilità di creare tipi, definire oggetti personalizzati, costruire la propria gerarchia di oggetti e formare in modo flessibile le proprie strutture di dati, come le liste collegate. Per i programmi BPF che entrano in modalità sleep (BPF_F_SLEEPABLE) è stata aggiunta la supporto per il blocco bpf_rcu_read_{,un}lock(). È stata implementata la supporto per il salvataggio degli oggetti task_struct. Aggiunto il tipo di mappa BPF_MAP_TYPE_CGRP_STORAGE, che fornisce uno spazio di archiviazione locale per i cgroups.
    • Per il meccanismo di blocco RCU (Read-copy-update) è stato implementato un meccanismo opzionale di callback «pigri», in cui un timer gestisce in modo batch più callback in una volta. L'applicazione dell'ottimizzazione proposta consente di ridurre il consumo energetico sui dispositivi Android e ChromeOS del 5-10% grazie al rinvio delle richieste RCU durante i periodi di inattività o di bassa carico del sistema.
    • È stato aggiunto sysctl split_lock_mitigate per controllare la reazione del sistema in caso di rilevamento di lock divisi («split lock»), che si verificano quando si accede a dati non allineati in memoria a causa del fatto che, durante l'esecuzione di un'istruzione atomica, i dati attraversano due linee di cache della CPU. Tali lock portano a una significativa riduzione delle prestazioni. Impostando split_lock_mitigate a 0 viene visualizzato solo un avviso sulla presenza del problema, mentre impostando a 1, oltre all'avviso, si verifica anche una riduzione della velocità di esecuzione del processo che ha causato il lock, al fine di mantenere le prestazioni del resto del sistema.
    • Per l'architettura PowerPC è stata proposta una nuova implementazione dei lock qspinlock, che mostra prestazioni superiori e risolve alcuni problemi di locking che si verificano in casi eccezionali.
    • È stato rivisitato il codice di gestione delle interruzioni MSI (Message-Signaled Interrupts), nel quale sono state risolte problematiche architettoniche accumulate e aggiunta la supporto per il binding di gestori specifici a diversi dispositivi.
    • Per i sistemi basati sull'architettura del set di istruzioni LoongArch, utilizzata nei processori Loongson 3 5000 e che implementa un nuovo ISA RISC simile a MIPS e RISC-V, è stato implementato il supporto per ftrace, la protezione dello stack e le modalità sleep e wait.
    • È stata fornita la possibilità di assegnare nomi a aree di memoria anonima condivisa (in precedenza i nomi potevano essere assegnati solo a memoria anonima privata, legata a un processo specifico).
    • È stato aggiunto un nuovo parametro della riga di comando del kernel «trace_trigger», destinato ad attivare un trigger di tracing, utilizzato per il binding di comandi condizionali invocati al verificarsi di un controllo (ad esempio, trace_trigger=»sched_switch.stacktrace if prev_state == 2″).
    • Aumentate le richieste per la versione del pacchetto binutils. Per compilare il kernel ora è richiesta almeno la versione binutils 2.25.
    • È stata aggiunta la possibilità di collocare un processo nello spazio dei nomi temporale (time namespace) durante la chiamata a exec(), dove il tempo differisce da quello di sistema.
    • È iniziato il trasferimento della funzionalità aggiuntiva dalla branch Rust-for-Linux, relativa all'uso del linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel. Il supporto per Rust è disattivato per impostazione predefinita e non comporta l'inclusione di Rust tra le dipendenze di compilazione obbligatorie del kernel. La funzionalità di base proposta nel precedente rilascio è stata ampliata con nuove possibilità per il supporto di codice a basso livello, come il tipo Vec e i macro pr_debug!(), pr_cont!() e pr_alert!(), oltre al macro procedurale «#[vtable]», che semplifica la gestione delle tabelle dei puntatori alle funzioni. Si prevede l'aggiunta di wrapper Rust di alto livello sopra le sottosistemi del kernel, che consentiranno la creazione di driver completi in Rust, nei prossimi rilasci.
    • Il tipo «char» utilizzato nel kernel è ora dichiarato senza segno per tutte le architetture per impostazione predefinita.
    • È stato deprecato il meccanismo di allocazione della memoria slab — SLOB (slab allocator), progettato per sistemi con limitata memoria. Si consiglia di utilizzare SLUB o SLAB nelle normali condizioni invece di SLOB. Per i sistemi con memoria limitata, si raccomanda di utilizzare SLUB in modalità SLUB_TINY.
  • Sottosistema di disco, input/output e file system
    • In Btrfs sono stati apportati miglioramenti mirati a risolvere il problema del «write hole» nell'implementazione RAID 5/6 (un tentativo di recupero RAID, se un crash si verifica durante la scrittura e non è possibile comprendere quale blocco è stato scritto correttamente su quali dispositivi RAID, il che potrebbe portare alla corruzione dei blocchi corrispondenti ai blocchi non scritti). Inoltre, per gli SSD, ora viene attivato automaticamente per impostazione predefinita l'esecuzione asincrona dell'operazione «discard», che consente di ottenere prestazioni più elevate grazie all'efficace raggruppamento delle operazioni «discard» in coda e all'elaborazione della coda da parte di un elaboratore in background. Sono state migliorate le prestazioni delle operazioni send e lseek, così come ioctl FIEMAP.
    • Sono state ampliate le funzioni di gestione della scrittura ritardata (writeback, salvataggio in background dei dati modificati) per i dispositivi a blocchi. In alcune situazioni, ad esempio durante l'utilizzo di dispositivi a blocchi di rete o di unità USB, la scrittura ritardata può comportare un elevato consumo di memoria. Per gestire il comportamento della scrittura ritardata e mantenere la dimensione della cache di pagina entro limiti specifici in sysfs (/sys/class/bdi/) sono stati introdotti nuovi parametri strict_limit, min_bytes, max_bytes, min_ratio_fine e max_ratio_fine.
    • Nel file system F2FS è stata implementata l'operazione ioctl di sostituzione atomica, che consente di eseguire la scrittura dei dati in un file nell'ambito di un'unica operazione atomica. In F2FS è stata anche aggiunta la cache a blocchi degli extent, che aiuta a determinare i dati utilizzati attivamente o quelli ai quali non si accede da molto tempo.
    • Nel file system ext4 è stato segnalato solo il correggere degli errori.
    • Nel file system ntfs3 sono state proposte diverse nuove opzioni di montaggio: "nocase" per gestire il rispetto del maiuscole/minuscole nei nomi di file e directory; windows_name per vietare la creazione di nomi di file contenenti caratteri non validi per il sistema operativo Windows; hide_dot_files per gestire l'assegnazione del flag di file nascosti per i file che iniziano con un punto.
    • Nel file system Squashfs è stata implementata l'opzione di montaggio "threads=", che consente di definire il numero di thread per il parallelismo delle operazioni di decompressione. In Squashfs è stata anche aggiunta la possibilità di mappare gli identificatori degli utenti dei file system montati, utilizzata per associare i file di un determinato utente in una partizione montata di un altro utente nel sistema attuale.
    • È stata rivisitata l'implementazione delle liste di controllo degli accessi POSIX (POSIX ACL). Nella nuova implementazione sono state eliminate le problematiche architettoniche, semplificata la manutenzione della base di codice e utilizzati tipi di dati più sicuri.
    • Nella sottosistema fscrypt, utilizzato per la crittografia trasparente di file e directory, è stata aggiunta la supporto per l'algoritmo di crittografia SM4 (standard cinese GB/T 32907-2016).
    • È stata fornita la possibilità di compilare il kernel senza supporto per NFSv2 (in futuro si prevede di interrompere completamente il supporto per NFSv2).
    • È stata modificata l'organizzazione del controllo dei diritti di accesso ai dispositivi NVMe. Ora è possibile leggere e scrivere su un dispositivo NVMe se il processo di scrittura ha accesso a un file speciale del dispositivo (in precedenza il processo doveva avere il privilegio CAP_SYS_ADMIN).
    • Rimosso il driver di pacchetto per CD/DVD, dichiarato obsoleto nel 2016.
  • Virtualizzazione e sicurezza
    • Implementato un nuovo metodo di protezione contro la vulnerabilità Retbleed nei CPU Intel e AMD, che utilizza il tracciamento della profondità delle chiamate, senza rallentare quanto la protezione precedente contro Retbleed. Per abilitare la nuova modalità, è stato proposto il parametro della riga di comando del kernel "retbleed=stuff".
    • Aggiunto un meccanismo ibrido di protezione del flusso di esecuzione dei comandi FineIBT, che combina l'uso delle istruzioni hardware Intel IBT (Indirect Branch Tracking) e della protezione software kCFI (kernel Control Flow Integrity) per bloccare la violazione dell'ordine normale di esecuzione (control flow) a seguito dell'utilizzo di exploit che modificano i puntatori alle funzioni memorizzati in memoria. FineIBT consente l'esecuzione tramite salti indiretti solo se il salto si dirige verso l'istruzione ENDBR, posizionata all'inizio della funzione. Inoltre, analogamente al meccanismo kCFI, viene effettuato un controllo degli hash per garantire l'immutabilità dei puntatori.
    • Aggiunti vincoli per bloccare attacchi che manipolano la generazione di stati "oops", dopo i quali i compiti problematici vengono terminati e lo stato viene ripristinato senza interrompere il funzionamento del sistema. Con un numero molto elevato di chiamate allo stato "oops" si verifica un overflow del contatore dei riferimenti (refcount), che consente di sfruttare vulnerabilità causate dall'accesso a puntatori NULL. Per proteggere da tali attacchi, è stato aggiunto un limite massimo al numero di attivazioni di "oops"; superato tale limite, il kernel innescherà una transizione allo stato "panic" con successivo riavvio, impedendo di raggiungere il numero di iterazioni necessario per l'overflow del refcount. Di default, il limite è impostato a 10.000 "oops", ma può essere modificato tramite il parametro oops_limit.
    • Aggiunto il parametro di configurazione LEGACY_TIOCSTI e sysctl legacy_tiocsti per disabilitare la possibilità di immettere dati nel terminale tramite ioctl TIOCSTI, poiché questa funzionalità può essere utilizzata per inserire caratteri arbitrari nel buffer di input del terminale e simulare l'immissione dell'utente.
    • Proposto un nuovo tipo di strutture interne encoded_page, in cui i bit inferiori del puntatore vengono utilizzati per memorizzare informazioni aggiuntive utilizzate per proteggere contro la dereferenziazione accidentale del puntatore (in caso di reale necessità di dereferenziazione, è necessario prima ripulire questi bit aggiuntivi).
    • Sulla piattaforma ARM64, durante il caricamento è stata fornita la possibilità di abilitare e disabilitare l'implementazione software del meccanismo Shadow Stack, utilizzato per proteggere contro la sovrascrittura dell'indirizzo di ritorno dalla funzione in caso di overflow del buffer nello stack (il principio di protezione consiste nel salvare dopo il passaggio di controllo alla funzione l'indirizzo di ritorno in uno 'stack ombra' separato e nel recupero di tale indirizzo prima di uscire dalla funzione). Il supporto in un'unica build del kernel per l'implementazione hardware e software dello Shadow Stack consente di utilizzare un solo kernel su diversi sistemi ARM, indipendentemente dal supporto per le istruzioni relative all'autenticazione dei puntatori. L'abilitazione dell'implementazione software avviene mediante la sostituzione delle istruzioni necessarie nel codice durante il caricamento.
    • Aggiunto il supporto per l'utilizzo sui processori Intel del meccanismo di notifica asincrona di uscita (asynchronous exit notification), che consente di rilevare attacchi single-step sul codice eseguito all'interno degli enclaves SGX.
    • Proposta una serie di operazioni che consentono all'Hypervisor di supportare le richieste dai sistemi guest Intel TDX (Trusted Domain Extensions).
    • Rimosse le opzioni di configurazione del kernel RANDOM_TRUST_BOOTLOADER e RANDOM_TRUST_CPU, le quali devono essere sostituite con le corrispondenti opzioni della riga di comando random.trust_bootloader e random.trust_cpu.
    • Nel meccanismo Landlock, che consente di limitare l'interazione di un gruppo di processi con l'ambiente esterno, è stato aggiunto il supporto per il flag LANDLOCK_ACCESS_FS_TRUNCATE, che consente di controllare l'esecuzione delle operazioni di riduzione dei file.
  • Sottosistema di rete
    • Per IPv6 è stata aggiunta la supporto per PLB (Protective Load Balancing), un meccanismo di bilanciamento del carico tra i collegamenti di rete, finalizzato a ridurre i punti di congestione negli switch dei data center. Attraverso la modifica dell'IPv6 Flow Label, PLB modifica casualmente i percorsi dei pacchetti per livellare il carico delle porte dello switch. Per ridurre il riordino dei pacchetti, questa operazione viene effettuata, se possibile, dopo i periodi di inattività (idle). L'applicazione di PLB nei data center di Google ha consentito di ridurre il disallineamento del carico sulle porte degli switch in media del 60%, diminuire la perdita di pacchetti del 33% e ridurre la latenza del 20%.
    • Aggiunto driver per dispositivi MediaTek con supporto Wi-Fi 7 (802.11be).
    • Aggiunto supporto per collegamenti a 800 gigabit.
    • Aggiunta la possibilità di rinominare le interfacce di rete al volo, senza interrompere il funzionamento.
    • Nei messaggi di log registrati per il SYN flood è stata aggiunta una menzione all'indirizzo IP a cui è arrivato il pacchetto.
    • Per UDP è stata implementata la possibilità di utilizzare tabelle di hash separate per diversi spazi dei nomi di rete.
    • Per i bridge di rete è stato implementato il supporto per il metodo di autenticazione MAB (MAC Authentication Bypass).
    • Per il protocollo CAN (CAN_RAW) è stato implementato il supporto per la modalità socket SO_MARK per allegare filtri di traffico basati su fwmark.
    • In ipset è stato implementato un nuovo parametro bitmask, che consente di impostare una maschera basata su bit arbitrari nell'indirizzo IP (ad esempio, «ipset create set1 hash:ip bitmask 255.128.255.0»).
    • In nf_tables è stato aggiunto il supporto per l'elaborazione degli header interni (inner) che viaggiano all'interno dei pacchetti incapsulati.
  • Apparecchiatura
    • È stata aggiunta la sottosistema «accel» con l'implementazione di un framework per acceleratori di calcolo, che possono essere forniti sia sotto forma di ASIC separati sia come blocchi IP all'interno di SoC e GPU. Principalmente, tali acceleratori sono mirati ad accelerare la risoluzione di compiti di apprendimento automatico.
    • Nel driver amdgpu è stata abilitata la supporto per i componenti IP GC, PSP, SMU e NBIO. Per i sistemi ARM64 è stato implementato il supporto per DCN (Display Core Next). L'implementazione dell'uscita video protetta è stata trasferita dall'uso di DCN10 a DCN21 e ora può essere utilizzata quando si collegano più schermi.
    • Nel driver i915 (Intel) è stata stabilizzata la supporto per le schede grafiche discrete Intel Arc (DG2/Alchemist).
    • Nel driver Nouveau è stato implementato il supporto per GPU NVIDIA GA102 (RTX 30) basato sull'architettura Ampere. Per le schede nva3 (GT215) è stata aggiunta la possibilità di controllare l'illuminazione di sfondo.
    • È stata aggiunta la compatibilità con adattatori wireless basati su chip Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) e MediaTek MT7996, interfacce Bluetooth Broadcom BCM4377/4378/4387, così come controller Ethernet Motorcomm yt8521, NVIDIA Tegra GE.
    • È stata aggiunta la compatibilità con ASoC (ALSA System on Chip) per i chip audio integrati HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. È stata aggiunta la compatibilità con l'interfaccia audio Focusrite Saffire Pro 40. È stato aggiunto il codec audio Realtek RT1318.
    • È stata aggiunta la compatibilità con smartphone e tablet Sony (Xperia 10 IV, 5 IV, X e X compact, OnePlus One, 3, 3T e Nord N100, Xiaomi Poco F1 e Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • È stata aggiunta la compatibilità con ARM SoC e schede Apple 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.

Contemporaneamente, la Fondazione Latinoamericana per il Software Libero ha formato una variante completamente libera del kernel 6.2 — Linux-libre 6.2-gnu, ripulita da elementi di firmware e driver contenenti componenti o sezioni di codice non liberi, il cui utilizzo è limitato dal produttore. Nella nuova versione è stata eseguita una pulizia dei nuovi blob nel driver nouveau. È stato disabilitato il caricamento dei blob nei driver mt7622, mt7996 wifi e bcm4377 bluetooth. È stata eseguita una pulizia dei nomi dei blob nei file dts per l'architettura Aarch64. Il codice di pulizia dei blob in vari driver e sottosistemi è stato aggiornato. È stata interrotta la pulizia del driver s5k4ecgx, poiché era stato rimosso dal kernel.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster