Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.10. Tra le modifiche più significative: il driver ntsync con primitive di sincronizzazione Windows NT, i componenti DRM Panic per implementare un’alternativa al “blue screen of death”, la cessazione del supporto per le vecchie CPU Alpha, la possibilità di verifica dell’integrità nel file system basato su FUSE, il limitato accesso a ioctl tramite il meccanismo Landlock, un sottosistema per il profiling delle operazioni di allocazione della memoria, la chiamata di sistema mseal(), la possibilità di scambiare dati in modo crittografato con dispositivi TPM, e il supporto per code di lavoro ad alta priorità in dm-crypt, il driver panthor per la decima generazione delle GPU Mali.
Nella nuova versione sono stati inclusi 14564 correttivi da 1989 sviluppatori, la dimensione della patch è di 41 MB (le modifiche hanno interessato 12509 file, sono state aggiunte 547663 righe di codice e rimosse 312464 righe). Nell’uscita precedente c’erano stati 15680 correttivi da 2106 sviluppatori, con una patch di 54 MB. Circa il 41% di tutte le modifiche presentate in 6.10 riguarda i driver dei dispositivi, circa il 15% delle modifiche è relativo 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 sotto-sistemi interni del kernel.
Le principali novità nel kernel 6.10:
- Sottosistema di disco, input/output e file system
- È stata aggiunta una nuova operazione fcntl F_DUPFD_QUERY, che consente a un processo di stabilire che due descrittori di file diversi puntano allo stesso file. A differenza delle funzionalità simili fornite dalla chiamata di sistema kcmp(), F_DUPFD_QUERY non comporta la divulgazione di informazioni superflue e funziona su sistemi con kcmp disabilitato.
- Nel 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 delle unità 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é potrebbe portare a un aumento della latenza su PC normali durante l'esecuzione di operazioni non correlate alla crittografia, come l'elaborazione audio.
- È stato aggiunto un protocollo basato su netlink per la gestione del server NFS nel kernel. Nell'utente spazio, basata su questo protocollo, è stata preparata l'utilità nfsdctl. È stata disabilitata per impostazione predefinita la supporto per il montaggio di NFS v2 (nel'utilità mount.nfs il supporto per NFS v2 è stato interrotto nel 2021).
- Nella filesystem XFS è proseguito il lavoro sulla realizzazione della possibilità di applicare l'utilità fsck per controllare e correggere i problemi riscontrati in modalità online, senza smontare il filesystem. È stato aggiunto l'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 di estensione non fissate, il che può risultare utile per ridurre il consumo di memoria in situazioni di scarsità di memoria nel sistema. Il codice per la compressione dei dati e la funzione put_file_data() sono stati convertiti per utilizzare i fascicoli di pagine di memoria (page folios). È stato rielaborato il meccanismo di blocco delle estensioni durante l'esecuzione delle operazioni di scrittura inversa.
- Nel FS Ext4 è stato aggiunto il supporto per ioctl FS_IOC_GETFSSYSFSPATH per determinare la posizione di un dato FS montato nella gerarchia /sys/fs.
- I filesystem OPENPROMFS, ISOFS, QNX6, NILFS2, MINIX e FREEVXFS sono stati convertiti per utilizzare il nuovo API per il montaggio delle partizioni.
- Nel filesystem EROFS (Extendable Read-Only File System), destinato all'uso su partizioni accessibili in sola lettura, è stato aggiunto il supporto per l'algoritmo di compressione Zstandard.
- In Bcachefs è stata preparata la possibilità di eseguire fsck senza smontare la partizione (verifica online). Sono state aggiunte modifiche e correzioni per aumentare l'affidabilità del funzionamento. È stata implementata la possibilità di aggiornare e tornare indietro nel formato FS in modalità 'nochanges', che disabilita la scrittura e conserva i metadati solo in memoria.
- Nel filesystem OverlayFS è stato aggiunto il supporto per la creazione di file temporanei, utilizzando l'opzione O_TMPFILE.
- È stata interrotta la 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 stato di sperimentale, non ha ricevuto diffusione nella pratica e complica la manutenzione del sottosistema dei dispositivi a blocchi.
- Memoria e servizi di sistema
- Aggiunto, ma disabilitato nella compilazione, il driver ntsync, che implementa il dispositivo a carattere /dev/ntsync e un insieme di primitive per la sincronizzazione utilizzate nel nucleo di Windows NT. L'implementazione di tali primitive a livello di nucleo consente di aumentare significativamente le prestazioni dei giochi per Windows eseguiti tramite Wine. L'incremento delle prestazioni è ottenuto grazie all'eliminazione dei costi indiretti associati all'uso di RPC nello spazio utente. La creazione di un driver separato per il nucleo Linux è spiegabile con la problematicità della corretta implementazione dell'API di sincronizzazione NT sopra le primitive esistenti nel nucleo.
- Aggiunta una sottosistema per il profilo delle operazioni di allocazione della memoria nel nucleo Linux, che consente di rilevare perdite di memoria nel nucleo e semplifica le ottimizzazioni del consumo di memoria. La sottosistema garantisce bassi costi indiretti, il che consente di utilizzarla non solo nelle compilazioni di debug del nucleo, ma anche nei sistemi operativi di produzione.
- Aggiunta una prima implementazione di gestore di situazioni di emergenza nel nucleo - DRM Panic, che utilizza la sottosistema DRM (Direct Rendering Manager) per mostrare un rapporto colorato e visivo nello stile dello "schermo blu della morte". Nella prossima versione è prevista l'aggiunta della possibilità di visualizzare il logo e un codice QR sullo schermo in caso di stato di emergenza.
- Continuato il trasferimento delle modifiche dalla branch Rust-for-Linux, relative all'uso del linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del nucleo (il supporto per Rust non è attivo di default e non porta all'inclusione di Rust tra le dipendenze obbligatorie di compilazione del nucleo). È stato attuato il passaggio all'uso della versione Rust 1.78, che ha permesso di passare all'uso della libreria alloc standard, invece di un ramo proprietario. Aggiunte astrazioni per lavorare con il tempo nel nucleo (wrapper sopra la struttura ktime_t). Aggiunto il supporto per l'uso dei componenti del nucleo in linguaggio Rust su sistemi con architettura RISC-V.
- Nei programmi BPF è stata implementata la possibilità di utilizzare le 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 dal pianificatore di attività. È stata fornita la possibilità di accesso ai programmi BPF alle funzioni crittografiche del kernel (crypto). È stato implementato il supporto per la compilazione JIT dei programmi BPF sui sistemi con processori a 32 bit ARCv2.
- Per i sistemi a 32 bit ARM è stato implementato il supporto per la costruzione 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'applicazione 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 aggiunta la chiamata di sistema "mseal", che consente ai processi di impostare un blocco sulla modifica di determinate parti del proprio spazio di indirizzi. Nella pratica, si prevede di utilizzare la nuova chiamata di sistema nel browser Chrome per rafforzare l'isolamento del sandbox.
- Per la sottoarchitettura x32, che fornisce un ABI ibrido x86_64, che consente di utilizzare su sistemi a 64 bit il modello di indirizzamento della memoria a 32 bit (il processore opera in modalità a 64 bit, ma utilizza puntatori e operazioni aritmetiche a 32 bit), è stato aggiunto il supporto per il meccanismo Shadow Stack, che consente di bloccare il funzionamento di molti exploit, sfruttando le capacità hardware dei processori Intel per proteggere da sovrascritture degli indirizzi di ritorno dalle funzioni in caso di overflow del buffer nello stack.
- Nei sistemi con architettura ARM64, nella chiamata di sistema userfaultfd(), che consente di creare gestori per gli errori di pagina non allocati (page faults) nello spazio utente, sono state implementate funzionalità legate alla protezione dalla scrittura nelle aree di memoria e negli elementi della tabella delle pagine di memoria.
- Il codice per il supporto dei processori Alpha 21164 (EV5) e delle serie precedenti, rilasciato dal 1995, è stato rimosso. Il supporto per questi processori è diventato complesso a causa della mancanza di accesso alla memoria a livello di singoli byte. Alpha è stata la prima architettura su cui è stato portato il kernel Linux, inizialmente disponibile solo per sistemi x86.
- Virtualizzazione e sicurezza
- Aggiunto il supporto per la comunicazione cifrata con i dispositivi TPM (Trusted Platform Module) e per la verifica dell'integrità delle transazioni.
- Nel modulo LSM Landlock, che consente di limitare 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 impostare durante il caricamento, che garantisce l'azzeramento del contenuto della memoria protetta da swapping tramite la chiamata mlock(), se tale memoria viene liberata senza la sblocco tramite munlock(). L'uso di questa opzione permette di escludere la persistenza delle chiavi crittografiche in memoria in caso di chiusura imprevista dell'applicazione che le utilizza.
- Nel 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.
- È stata rimossa la possibilità di raccogliere statistiche sull'utilizzo del sottosistema crittografico del kernel (CONFIG_CRYPTO_STATS). Questa funzionalità non veniva utilizzata nella pratica e portava a una significativa riduzione delle prestazioni, oltre a creare un carico supplementare avvertibile per i manutentori.
- Sottosistema di rete
- È stata notevolmente migliorata l'efficienza delle operazioni di invio dati in modalità zero-copy con l'uso del sottosistema io_uring. È stata aggiunta la possibilità di raggruppare ('bundle') più buffer per le operazioni di invio e ricezione dei dati.
- Il codice per la gestione della memoria, utilizzato per inviare descrittori di file tramite socket Unix utilizzando messaggi SCM_RIGHTS, è stato riscritto. Questa modifica risolve il problema dell'accumulo di contatori di riferimenti ciclici.
- È stata introdotta la possibilità di impostare filtri per il protocollo PFCP (Packet Forwarding Control Protocol), utilizzato nelle reti 4G e 5G.
- Aggiunta la supporto per l'opzione dei socket di rete SO_PEEK_OFF, che, analogamente alla stessa opzione 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 (segna i dati come non letti e verranno restituiti nuovamente alla prossima chiamata di recv).
- Nel sottosistema io_uring è stata aggiunta la supporto per l'operazione IORING_CQE_F_SOCK_NONEMPTY, che consente di determinare la presenza di richieste di connessione in attesa di elaborazione su un socket di rete.
- È stata proposta un'implementazione della tecnologia PoE (Power over Ethernet), basata su codice precedentemente disponibile per il supporto di 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 dell'invio dei pacchetti RST (ad esempio, NO_SOCKET).
- Apparecchiatura
- Includono il driver panthor per la decima generazione di GPU Mali (G310, G510, G710), in cui è applicata la tecnologia CSF (Command Stream Frontend), che sposta alcune funzioni del driver al firmware per ridurre il carico sulla CPU e offre un nuovo modello di organizzazione dell'esecuzione delle operazioni sulla GPU. Le modifiche per supportare il nuovo driver sono state adottate anche in Mesa e incluse nel driver Gallium panfrost per GPU Mali.
- Nel driver i915 sono stati aggiunti identificatori PCI per le nuove schede grafiche discrete Intel Arc (DG2/Alchemist).
- Prosegue il lavoro sul driver drm (Direct Rendering Manager) Xe per GPU basate sull'architettura Intel Xe, utilizzata nelle schede grafiche Intel della famiglia Arc e nella grafica integrata, a partire dai processori Tiger Lake. È stata aggiunta la supporto per CPU Arrow Lake H. Prosegue l'implementazione del supporto per i processori Lunar Lake. È stata aggiunta la supporto iniziale per il meccanismo SR-IOV (Single Root I/O Virtualization).
- Nel driver AMDGPU è stata aggiunta la 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, che può essere utilizzato per accelerare AES e vari algoritmi di hashing.
- È stata aggiunta la supporto per i pannelli LCD 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 compatibilità con i sistemi audio dei notebook Lenovo Thinkbook 13x Gen 4, Lenovo Thinkbook 16P Gen 5, Lenovo Thinkbook 13X e ASUS Zenbook 2024 HN7306W. È stata aggiunta la compatibilità con le schede audio esterne Vocaster One e Vocaster Two. È stato aggiunto un driver per gli amplificatori NAU8325 dell'azienda Nuvoton Technology.
- Nel driver HID-Steam è stata aggiunta la compatibilità con l'IMU (Inertial Measurement Unit) del controller di gioco Steam Deck, permettendo di utilizzare un nodo evdev separato per accedere ai dati del giroscopio e dell'accelerometro.
- Sono state attivate modifiche per supportare il SoC ARM Snapdragon X Elite, che utilizza una CPU Qualcomm Oryon a 12 core e una GPU Qualcomm Adreno. Il chip è mirato all'uso in notebook e PC, superando in molti test di prestazioni i chip Apple M3 e Intel Core Ultra 155H.
- È stata aggiunta la compatibilità con le piattaforme ARM, SoC e dispositivi: PocketBook 614 Plus, Sony Xperia Z3, Xperia 1 V, Samsung Galaxy S5 China, 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.
- È stata aggiunta la compatibilità con le schede Milk-V Mars, che utilizzano il SoC Starfive JH7110 basato sull'architettura RISC-V.
Contemporaneamente, il Fondo Latinoamericano per il Software Libero ha creato una versione completamente libera del kernel 6.10 — Linux-libre 6.10-gnu, ripulita da elementi di firmware e driver contenenti componenti proprietary o sezioni di codice la cui area d'uso è limitata dal produttore. Nella release 6.10 è stato aggiornato il codice di pulizia dei blob nei driver Intel i915, rtl8xxxu, qla2xxx e QCAI sahara. È stata effettuata la pulizia dei nomi dei blob nei file dts (device tree) per l'architettura Aarch64. Sono stati 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
