Release del kernel Linux 6.10

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.10. Tra le modifiche più significative: driver ntsync con primitive di sincronizzazione Windows NT, componenti DRM Panic per implementare un equivalente della "schermata blu della morte", cessazione del supporto per le vecchie CPU Alpha, possibilità di verifica dell'integrità nel file system basato su FUSE, restrizione dell'accesso a ioctl tramite il meccanismo Landlock, sottosistema per il profiling delle operazioni di allocazione di memoria, system call mseal(), possibilità di scambio di dati crittografati con dispositivi TPM, supporto per code di lavoro ad alta priorità in dm-crypt, driver panthor per la decima generazione di GPU Mali.

Nella nuova versione sono stati inclusi 14564 fix da 1989 sviluppatori, la dimensione della patch è di 41 MB (le modifiche hanno interessato 12509 file, aggiungendo 547663 righe di codice e rimuovendone 312464). Nella versione precedente erano presenti 15680 fix da 2106 sviluppatori, con una dimensione della patch di 54 MB. Circa il 41% di tutte le modifiche presentate nella 6.10 riguardano i driver dei dispositivi, circa il 15% sta all'aggiornamento del codice specifico per le architetture hardware, il 13% è collegato allo stack di rete, il 5% ai file system e il 4% ai sottosistemi interni del kernel.

Novità principali nel kernel 6.10:

  • Sottosistema disco, I/O e file system
    • È stata aggiunta una nuova operazione fcntl F_DUPFD_QUERY, grazie alla quale un processo può determinare se due diversi descrittori di file si riferiscono allo stesso file. A differenza delle funzionalità simili offerte dalla chiamata di sistema kcmp(), F_DUPFD_QUERY non comporta la divulgazione di informazioni non necessarie e funziona su sistemi con kcmp disabilitato.
    • Nella sottosistema FUSE, utilizzato per implementare file system nello spazio utente, è stata implementata la possibilità di applicare il meccanismo fs-verity per la verifica dell'integrità e dell'autenticità dei file.
    • Nel modulo dm-crypt, utilizzato per la crittografia dei dispositivi a blocchi, è stata aggiunta l'opzione «high_priority» che consente di utilizzare code di lavoro ad alta priorità per migliorare le prestazioni su sistemi potenti. serverPer impostazione predefinita, la modalità è disattivata, poiché può comportare un aumento della latenza su PC normali durante l'esecuzione di operazioni non legate alla crittografia, come l'elaborazione audio.
    • È stato aggiunto un protocollo basato su netlink per la gestione del server NFS nel kernel. Nell'utente è stata preparata l'utilità nfsdctl basata su questo protocollo. Il supporto per il montaggio di NFS v2 è disabilitato di default (il supporto per NFS v2 nell'utilità mount.nfs è stato interrotto nel 2021).
    • Nella filesystem XFS è continuato il lavoro per implementare la possibilità di utilizzare l'utility fsck per controllare e correggere problemi rilevati in modalità online, senza smontare il filesystem. È stato aggiunto ioctl XFS_IOC_EXCHANGE_RANGE per lo scambio di intervalli di byte tra due file in modalità atomica.
    • In Btrfs è stato implementato il supporto per il ridimensionamento (shrinker) delle mappe degli extent non ancorati, il che può rivelarsi utile per ridurre il consumo di memoria in caso di scarsità di RAM nel sistema. Il codice per la compressione dei dati e la funzione put_file_data() sono stati convertiti per utilizzare i folios di memoria. È stato rivisto il meccanismo di blocco degli extent durante le operazioni di scrittura.
    • Nel file system Ext4 è stata aggiunta la supporto per ioctl FS_IOC_GETFSSYSFSPATH per determinare la posizione di un dato file system montato nella gerarchia /sys/fs.
    • I file system OPENPROMFS, ISOFS, QNX6, NILFS2, MINIX e FREEVXFS sono stati aggiornati per utilizzare il nuovo API di montaggio delle partizioni.
    • Nel file system EROFS (Extendable Read-Only File System), progettato per l'uso su partizioni accessibili in modalità sola lettura, è stata aggiunta la supporto per l'algoritmo di compressione Zstandard.
    • In Bcachefs è stata preparata l'esecuzione di fsck senza smontare la partizione (controllo online). Sono state apportate modifiche e correzioni per migliorare l'affidabilità. È stata implementata la possibilità di aggiornare e ripristinare il formato del file system in modalità 'nochanges', che disabilita la scrittura e conserva i metadati solo in memoria.
    • Il file system OverlayFS ha aggiunto il supporto per la creazione di file temporanei utilizzando l'opzione O_TMPFILE.
    • È stato interrotto il supporto per il meccanismo di limitazione della larghezza di banda dei dispositivi a blocchi "CONFIG_BLK_DEV_THROTTLING_LOW", che dal 2017 ha mantenuto lo status di esperimento, non è stato adottato nella pratica e ha reso complessa la gestione del sottosistema dei dispositivi a blocchi.
  • Memoria e servizi di sistema
    • È stato aggiunto, ma disabilitato nella compilazione, il driver ntsync, che implementa il dispositivo carattere /dev/ntsync e un insieme di primitive per la sincronizzazione utilizzate nel kernel di Windows NT. L'implementazione di tali primitive a livello di kernel consente di aumentare notevolmente le prestazioni dei giochi Windows eseguiti tramite Wine. Il guadagno di prestazioni è ottenuto eliminando le spese generali associate all'uso di RPC nello spazio utente. La creazione di un driver separato per il kernel Linux è giustificata dalla difficoltà di implementare correttamente l'API di sincronizzazione NT sopra le primitive esistenti nel kernel.
    • È stata aggiunta una sottosistema per il profilo delle operazioni di allocazione della memoria nel kernel Linux, che consente di rilevare perdite di memoria nel kernel e semplifica le ottimizzazioni del consumo di memoria. La sottosistema garantisce bassi sovraccarichi, permettendo di utilizzarla non solo nelle build di debug del kernel, ma anche nei sistemi di produzione.
    • È stata aggiunta un'implementazione iniziale di un gestore delle situazioni di emergenza nel kernel — DRM Panic, che utilizza la sottosistema DRM (Direct Rendering Manager) per mostrare un report colorato in stile "schermo blu della morte". Nel prossimo rilascio è prevista l'aggiunta della possibilità di visualizzare un logo e un codice QR sullo schermo in caso di emergenza.
    • Continua il trasferimento delle modifiche dal ramo Rust-for-Linux, relative all'uso del linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel (il supporto per Rust non è attivo per impostazione predefinita, e non comporta l'inclusione di Rust tra le dipendenze di compilazione obbligatorie del kernel). È stato effettuato il passaggio alla versione Rust 1.78, che ha consentito di passare all'uso della libreria standard alloc, invece del proprio ramo. Sono state aggiunte astrazioni per la gestione del tempo nel kernel (una struttura di wrapping sopra ktime_t). È stato aggiunto il supporto per l'utilizzo di componenti del kernel in Rust su sistemi con architettura RISC-V.
    • Nei programmi BPF è stata implementata la possibilità di utilizzare code di attesa (wait queue) nel kernel. Sono state aggiunte le funzioni bpf_preempt_disable e bpf_preempt_enable, che consentono di creare sezioni di codice non interrotte dallo scheduler. È stata fornita la possibilità di accesso delle app BPF alle funzioni crittografiche del kernel (crypto). È stato implementato il supporto alla compilazione JIT dei programmi BPF su sistemi con processori a 32 bit ARCv2.
    • Per i sistemi ARM a 32 bit è stata implementata la supporto per la compilazione del kernel con il compilatore Clang, attivando la modalità di protezione CFI (Control Flow Integrity), che blocca le violazioni dell'ordine normale di esecuzione (control flow) a causa dell'uso di exploit che modificano i puntatori alle funzioni memorizzati in memoria.
    • È stata aggiunta la possibilità di riflessione diretta tramite mmap() dei buffer circolari di tracciamento, per trasferire il loro contenuto nello spazio utente senza ulteriori copie.
    • È stata introdotta la chiamata di sistema 'mseal', che consente ai processi di impostare un blocco sulla modifica di determinate parti del proprio spazio indirizzi. Nella pratica, questa nuova chiamata di sistema è prevista per essere utilizzata nel browser Chrome per rafforzare l'isolamento sandbox.
    • Per l'architettura x32, che fornisce un ABI ibrido x86_64, consentendo di utilizzare un modello di indirizzamento della memoria a 32 bit su sistemi a 64 bit (il processore opera in modalità a 64 bit ma utilizza puntatori e operazioni aritmetiche a 32 bit), è stata aggiunta la supporto del meccanismo Shadow Stack, che permette di bloccare l'attività di numerosi exploit, sfruttando le capacità hardware dei processori Intel per proteggere la scrittura dell'indirizzo di ritorno da una funzione in caso di overflow del buffer nello stack.
    • Nei sistemi con architettura ARM64, la chiamata di sistema userfaultfd(), che consente di creare gestori per le richieste di accesso a pagine di memoria non allocate (page faults) nello spazio utente, implementa funzionalità relative alla protezione da scritture nelle aree di memoria e negli elementi della tabella delle pagine di memoria.
    • Rimosso il codice per il supporto dei processori Alpha 21164 (EV5) e delle serie precedenti, rilasciati dal 1995. Il supporto del codice per questi processori è stato complicato a causa della mancanza della possibilità di accesso alla memoria a livello di byte singolo. Alpha è stata la prima architettura su cui è stato portato il kernel Linux, originariamente disponibile solo per sistemi x86.
  • Virtualizzazione e sicurezza
    • Aggiunto il supporto per lo scambio di dati crittografati con dispositivi TPM (Trusted Platform Module) e per il controllo dell'integrità delle transazioni.
    • Nel modulo LSM Landlock, che limita l'interazione di un gruppo di processi con l'ambiente esterno, è stata aggiunta la possibilità di applicare regole per limitare l'accesso alle chiamate ioctl().
    • Proposta un'opzione init_mlocked_on_free da specificare all'avvio, che garantisce la cancellazione del contenuto della memoria protetta contro la scrittura sul file di swap mediante la chiamata mlock(), se questa memoria viene liberata senza essere sbloccata con la chiamata munlock(). L'uso di questa opzione consente di evitare la permanenza di chiavi crittografiche nella memoria in caso di interruzione imprevista dell'applicazione che le gestisce.
    • Nella sottosistema crypto è stata accelerata l'esecuzione delle operazioni di crittografia su disco utilizzando l'algoritmo AES-XTS su sistemi x86_64 con processori Intel e AMD che supportano le estensioni VAES, AVX2, VPCLMULQDQ, AVX10 o AVX512.
    • Rimossa la possibilità di raccogliere statistiche sull'uso della crittografia nel kernel (CONFIG_CRYPTO_STATS). Questa funzionalità non veniva utilizzata in pratica e portava a una significativa degradazione delle prestazioni, oltre a creare un carico aggiuntivo percepibile sui manutentori.
  • Sottosistema di rete
    • Radicalmente migliorate le prestazioni delle operazioni di invio dati in modalità zero-copy utilizzando il sottosistema io_uring. Aggiunta la possibilità di aggregare ('bundle') più buffer per le operazioni di invio e ricezione dei dati.
    • Riscritto il codice per la raccolta dei rifiuti utilizzato durante l'invio di descrittori di file tramite socket Unix utilizzando messaggi SCM_RIGHTS. Questa modifica risolve il problema dell'accumulo di contatori di riferimenti ciclici.
    • Aggiunta la possibilità di impostare filtri per il protocollo PFCP (Packet Forwarding Control Protocol), utilizzato nelle reti 4G e 5G.
    • È stata aggiunta la supporto per l'opzione di socket di rete SO_PEEK_OFF, che, analogamente all'opzione equivalente per i socket Unix, consente di determinare l'offset dei dati nella coda utilizzato dalla chiamata di sistema recv quando si specifica il flag MSG_PEEK (contrassegna i dati come non letti, e verranno nuovamente forniti alla successiva chiamata di recv).
    • Nella sottosistema io_uring è stata aggiunta la supporto per l'operazione IORING_CQE_F_SOCK_NONEMPTY, che consente di determinare se un socket di rete ha richieste di connessione in attesa di elaborazione.
    • È stata proposta un'implementazione della tecnologia PoE (Power over Ethernet), basata su codice precedentemente disponibile per il supporto PoDL (Power over Data Line) e compatibile con i controller PoE Microchip PD692x0 e TI TPS23881.
    • Per i protocolli TCP, DCCP e MPTC è stata aggiunta la supporto per il meccanismo rstreason, che consente di determinare il motivo per cui vengono inviati i pacchetti RST (ad esempio, NO_SOCKET).
  • Attrezzature
    • È incluso il driver panthor per la decima generazione delle GPU Mali (G310, G510, G710), che utilizza la tecnologia CSF (Command Stream Frontend), esternalizzando alcune funzionalità del driver per ridurre il carico sulla CPU e offrendo un nuovo modello di organizzazione del lavoro sulle GPU. Le modifiche per supportare il nuovo driver sono state anche adottate in Mesa e incluse nel driver Gallium panfrost per le GPU Mali.
    • Nel driver i915 sono stati aggiunti identificatori PCI per le nuove schede grafiche discrete Intel Arc (DG2/Alchemist).
    • Continuano i lavori sul driver drm (Direct Rendering Manager) Xe per le GPU basate sull'architettura Intel Xe, utilizzata nelle schede grafiche Intel della famiglia Arc e nella grafica integrata, a partire dai processori Tiger Lake. È stato aggiunto il supporto per i CPU Arrow Lake H. Prosegue l'implementazione del supporto per i processori Lunar Lake. È stato aggiunto un supporto iniziale per il meccanismo SR-IOV (Single Root I/O Virtualization).
    • Nel driver AMDGPU è stato aggiunto il supporto per SMU 14.0 (System Management Unit). È stata aggiunta la possibilità di utilizzare nuove GPU AMD su sistemi con architettura RISC-V.
    • È stato aggiunto un driver per l'acceleratore delle operazioni crittografiche Tegra Security Engine, utilizzabile per accelerare AES e vari algoritmi di hashing.
    • È stata aggiunta la supporto per i pannelli LG SW43408, Innolux G121XCE-L01 LVDS, RK3326 GameForce Chi, Crystal Clear CMT430B19N00, POWERTIP PH128800T006-ZHC01, Startek KD050HDFIA020-C020A, Pixel 3a, Khadas TS050 V2, Raydium RM69380, BOE NT116WHM-N44, CMN N116BCA-EA1 e AUO B120XAN01.0.
    • È stata aggiunta la supporto per il sistema audio dei laptop Lenovo Thinkbook 13x Gen 4, Lenovo Thinkbook 16P Gen 5, Lenovo Thinkbook 13X e ASUS Zenbook 2024 HN7306W. È stata aggiunta la supporto per le schede audio esterne Vocaster One e Vocaster Two. È stato aggiunto il driver per gli amplificatori NAU8325 della Nuvoton Technology.
    • Nel driver HID-Steam è stata aggiunta la supporto per l'IMU (Unità di Misura Inerziale) del controller di gioco Steam Deck, consentendo di utilizzare un nodo evdev separato per accedere ai dati del giroscopio e dell'accelerometro.
    • Sono state incluse modifiche per supportare l'ARM SoC Snapdragon X Elite, che utilizza un CPU Qualcomm Oryon a 12 core e una GPU Qualcomm Adreno. Il chip è destinato all'uso in laptop e PC, superando in molti test prestazionali i chip Apple M3 e Intel Core Ultra 155H.
    • Aggiunta la supporto per schede ARM, SoC e dispositivi: PocketBook 614 Plus, Sony Xperia Z3, Xperia 1 V, Samsung Galaxy S5 Cina, Motorola Moto G, RK3326 GameForce Chi, Anbernic RG35XX (Plus/H/2024), Airoha EN7581, Radxa ROCK 3C, ArmSom Sige7, Tanix TX1, Toradex Colibri iMX8DX, Renesas RZ/V2H, Forlinx OK3588-C, Protonic MECSBC, Emcraft Systems NavQ+, NXP S32G3, Wolfvision pf5, Amlogic A4/A5, ASUS RT-AC3200, ASUS RT-AC5300, ASrock E3C256D4I, IBM system1 BMC, Meta Harma BMC(AST2600), ASRock X570D4U BMC, Au-Zone Maivin AI Vision Starter Kit.
    • Aggiunta la supporto per le schede Milk-V Mars, che utilizzano SoC Starfive JH7110 basato sull'architettura RISC-V.

Nel frattempo, il Fondo per il Software Libero dell'America Latina ha creato una versione completamente libera del kernel 6.10 — Linux-libre 6.10-gnu, ripulito da elementi di firmware e driver contenenti componenti o sezioni di codice non liberi, la cui area di applicazione è limitata dal produttore. Nella versione 6.10 è stato aggiornato il codice di pulizia dei blob nei driver Intel i915, rtl8xxxu, qla2xxx e QCAI sahara. Sono stati ripuliti i nomi dei blob nei file dts (devicetree) per l'architettura Aarch64. Ripuliti dai blob i nuovi file aggiunti nei driver Adreno, Intel IPU3 e PRUEth. È stata effettuata la pulizia dei nuovi driver Panthor, Intel IPU6, PRUEth SR1, rtw8703b, tps23881, air_en8811h, Intel ISH HID e pcm6240. È stata interrotta la pulizia del driver USB Prism2.5/3 USB, che è stato rimosso dal kernel.

Fonte: opennet.ru

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