Rilascio del kernel Linux 6.6

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.6. Tra le modifiche più significative: un nuovo scheduler delle attività EEVDF; un meccanismo di stack shadow per proteggere contro gli exploit; supporto per fs-verity in OverlayFS; implementazione di quote e xattr in tmpfs; preparazione per online fsck in XFS; migliorato il monitoraggio dell'esportazione dei simboli ‘GPL-only’; supporto per socket di rete in io_uring; randomizzazione della memoria in kmalloc(); dichiarato obsoleto ReiserFS; aggiunti primitivi per il driver Vulkan NVK in Nouveau.

Nella nuova versione sono stati accettati 15291 cambiamenti da 2058 sviluppatori, la dimensione della patch è di 39 MB (le modifiche hanno coinvolto 14844 file, aggiunte 553359 righe di codice, rimosse 284012 righe). Nella versione precedente c'erano 14674 cambiamenti da 2016 sviluppatori, la dimensione della patch era di 78 MB. Circa il 44% di tutte le modifiche presentate in 6.6 riguardano i driver dei dispositivi, circa il 17% è relativo all'aggiornamento del codice specifico per le architetture hardware, l'11% è correlato allo stack di rete, il 4% ai file system e il 3% ai sottosistemi interni del kernel.

Le principali novità nel kernel 6.6:

  • Memoria e servizi di sistema
    • È stato implementato un nuovo scheduler delle attività EEVDF (Earliest Eligible Virtual Deadline First), che ha sostituito lo scheduler CFS (Completely Fair Scheduler), fornito a partire dal kernel 2.6.23. Il nuovo scheduler, nella scelta del prossimo processo da eseguire, tiene conto dei processi che non hanno ricevuto risorse CPU sufficienti o che hanno ricevuto ingiustamente troppo tempo di CPU. Nel primo caso si forza il passaggio di controllo al processo, mentre nel secondo si rimanda. Il vecchio scheduler CFS utilizzava euristiche e configurazioni fini per determinare i processi che necessitavano di attenzione separata, mentre il nuovo scheduler li tiene sotto controllo in modo più esplicito e non richiede regolazioni fini. Si prevede che EEVDF ridurrà le latenze nell'esecuzione delle attività, con le quali CFS ha avuto problemi di pianificazione.
    • Sono state apportate modifiche alla gestione dei simboli interni della categoria ‘GPL-only’, mirate a rendere più difficile l'uso dei moduli proprietari GPL per aggirare le restrizioni di accesso ai sottosistemi del kernel, consentendo l'accesso solo a codice sotto licenza GPL. Nella funzione symbol_get() per i moduli proprietari, è stato vietato cercare simboli contrassegnati come GPL-only, e viceversa, i moduli GPL non potranno trovare simboli esportati da moduli proprietari.
    • Sono state aggiunte ulteriori configurazioni per le code di lavoro (unbound workqueue) per aumentare l'efficienza del riutilizzo della cache CPU su grandi sistemi con più cache di terzo livello (L3). Nel kernel è stata anche inclusa l'utilità tools/workqueue/wq_dump.py per controllare la configurazione corrente delle code di lavoro.
    • Nella sottosistema io_uring è stato aggiunto il supporto iniziale per operazioni e comandi specifici per socket di rete. È stato aggiunto sysctl io_uring_disabled per disabilitare io_uring a livello di sistema. In io_uring è stata inoltre notevolmente accelerata la modalità di input/output diretto (Direct I/O) in modo asincrono. L'aumento della larghezza di banda e la riduzione delle latenze nelle operazioni di input/output dopo le modifiche raggiungono il 37%.
    • Per l'architettura PA-RISC è stato implementato un JIT compiler per BPF.
    • Nella configurazione /sys/devices/system/cpu/smt/control è stato aggiunto il supporto per parametri numerici che definiscono il numero di thread disponibili per ciascun core CPU (in precedenza erano supportati solo i valori ‘on’ e ‘off’ per attivare e disattivare il supporto per il multithreading simultaneo). Questa nuova funzionalità può essere applicata su alcuni processori PowerPC che supportano la modalità di hot-plug del multithreading simultaneo (‘hotplug SMT’), per attivare selettivamente SMT su core specifici durante il funzionamento.
    • Continua 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 kernel (il supporto per Rust non è attivato per impostazione predefinita e non porta all'inclusione di Rust tra le dipendenze di compilazione obbligatorie per il kernel). È stata effettuata la transizione all'uso delle versioni Rust 1.71.1 e bindgen 0.65.1. Implementato il tratto ‘Zeroable’. Aggiunti macro procedurali ‘paste!’ e ‘#[derive(Zeroable)]’. Garantita la compatibilità con ‘#[pin_data]’. Aggiunte funzioni di inizializzazione ‘{,pin_}init_array_from_fn()’ e metodo ‘{,pin_}chain’. Ampliate le funzionalità del modulo ‘types’. Nel framework di unit testing kunit è stata aggiunta la possibilità di eseguire test dalla documentazione di Rust.
    • È stata aggiunta la sottosistema «eventfs», che consente di ridurre notevolmente il consumo di memoria nel sistema di tracciamento, eliminando la necessità di memorizzare strutture non necessarie utilizzate per rappresentare i punti di tracciamento nel file system. In precedenza, tali strutture venivano create per tutti i punti di tracciamento, indipendentemente dall'utilizzo della tracciatura. Grazie a eventfs, strutture simili possono ora essere create dinamicamente solo quando sono realmente necessarie.
    • Ampliate le funzionalità dell'utilità perf.
    • Nel file /proc/pid/smaps è stata aggiunta un'informazione per diagnosticare l'efficienza del meccanismo di fusione delle pagine di memoria identiche (KSM, Kernel Samepage Merging).
    • Rimosso l'API Frontswap, che consentiva di posizionare una partizione di swap in memoria non direttamente indirizzabile e che non forniva informazioni operative sulla disponibilità di spazio libero. Questo API veniva utilizzato solo in zswap, quindi si è deciso di utilizzare direttamente questa funzionalità in zswap, eliminando strati intermedi non necessari.
    • Per l'architettura RISC-V è stata aggiunta la supporto per l'accesso ai contatori delle prestazioni dallo spazio utente e la possibilità di collocare un dump del kernel dopo un crash in un'area oltre i 4GB.
    • Aggiunta la supporto iniziale per le istruzioni ARM SME (Scalable Matrix Extension).
    • Realizzata la possibilità di utilizzare strumenti di debug KDB, KGDB, kcov, KFENCE e KASAN su sistemi con architettura LoongArch.
    • Aggiunta la supporto per file di test del kernel nel sistema di integrazione continua GitLab, che viene utilizzato nello sviluppo di driver grafici.
  • Sottosistema disco, I/O e file system
    • Nel file system OverlayFS è stata aggiunta la supporto per la memorizzazione degli hash fs-verity nell'attributo esteso (xattr) overlay.verity, che può essere utilizzato per verificare l'integrità e l'autenticità dei file nei livelli inferiori di OverlayFS attraverso hash crittografici e chiavi. Così, OverlayFS ora include tutte le modifiche necessarie al progetto Composefs per funzionare come un'estensione sopra il file system OverlayFS e EROFS.
    • Nel file system XFS è stata effettuata la preparazione per l'implementazione della possibilità di utilizzare l'utilità fsck per controllare e correggere eventuali problemi in modalità online, senza dover smontare il file system. Inoltre, in XFS è stata introdotta la possibilità di utilizzare grandi volumi (folios) nella cache delle pagine e sono state aggiunte alcune ottimizzazioni correlate, che hanno notevolmente aumentato le prestazioni per alcuni tipi di carichi di lavoro.
    • Nel file system tmpfs è stata aggiunta la supporto per attributi estesi personalizzati (user xattrs), input/output diretto e quote legate a utenti e gruppi. Stabilizzati gli offset sulle directory, risolvendo problemi con l'esportazione di tmpfs tramite NFS.
    • Nell'API di gestione del montaggio è stato aggiunto un flag FSCONFIG_CMD_CREATE_EXCL per migliorare la sicurezza, vietando la condivisione del superblocco in più punti di montaggio (vietando l'attacco di una partizione a più punti di montaggio). Nell'utilità mount è stata proposta un'opzione '—exclusive' per abilitare questo flag.
    • Nel sottosistema VFS è stata aggiunta la supporto per la modifica operativa dei parametri con il tempo di accesso e modifica (atime, mtime). In precedenza, i dati sui tempi venivano riflessi con un certo ritardo, il che ostacolava il monitoraggio della pertinenza dei dati nella cache in sistemi simili a NFS (a causa del ritardo nella determinazione delle modifiche nel file, il sistema potrebbe erroneamente ritenere che i dati nella cache siano pertinenti). La nuova funzionalità è disponibile per Btrfs, Ext4, tmpfs e XFS.
    • In Btrfs è stato dichiarato obsoleto il meccanismo di controllo dell'integrità integrato, attivabile in fase di build tramite il parametro BTRFS_FS_CHECK_INTEGRITY. Questo meccanismo è rimasto senza supporto, non è più testato e genera un carico aggiuntivo su CPU e memoria. Inoltre, in Btrfs è stata ottimizzata la prestazione del nuovo codice di verifica del file system (scrub).
    • Nel file system Ext4 sono state aggiunte verifiche periodiche per l'aggiornamento del superblocco e sono state accelerate le operazioni di allocazione della memoria durante l'aggiunta a fine file.
    • Nel sottosistema FUSE è stata aggiunta la supporto per l'attributo btime («birth time»), che definisce il tempo di creazione dell'inode.
    • Vietata la modifica dei diritti di accesso per i link simbolici.
    • Aggiunto la chiamata di sistema fchmodat2(), che differisce dalla chiamata di sistema fchmodat() per un argomento addizionale per specificare i flag. Tra i flag, al momento sono supportati solo AT_SYMLINK_NOFOLLOW e AT_EMPTY_PATH, che consentono di implementare senza vie di fuga la funzione fchmodat() della libc per vietare la dereferenza dei link simbolici e la possibilità di utilizzare un descrittore di file specificando un percorso vuoto.
    • Nel file system EROFS (Extendable Read-Only File System), progettato per sezioni accessibili in sola lettura, è stata aggiunta la supporto per l'algoritmo di compressione Deflate. Per velocizzare la ricerca di attributi estesi, è stata utilizzata una struttura probabilistica chiamata bloom filter.
    • Aggiunta la configurazione CONFIG_BUFFER_HEAD, che consente di compilare il kernel senza l'uso della struttura buffer_head. Quando si compila senza buffer_head, è possibile utilizzare dispositivi a blocchi e alcuni file system, come xfs, btrfs, cramfs, erofs e squashfs.
    • Nel driver dei dispositivi a blocchi ublk, che consente di spostare logiche specifiche lato processo nello spazio utente, è stata aggiunta la supporto per dispositivi di archiviazione zonati (separazione in zone di gruppi di blocchi o settori in cui è consentita solo l'aggiunta sequenziale di dati con aggiornamento dell'intero gruppo di blocchi).
    • L'implementazione del file system ReiserFS è stata spostata da supportata a obsoleta. La fine del supporto per ReiserFS è prevista nel 2025. La motivazione per spostare ReiserFS nella categoria obsoleta include la stagnazione della sua manutenzione, il problema irrisolto del 2038, la mancanza di capacità di garantire tolleranza ai guasti e la volontà di ridurre gli sforzi di manutenzione riguardanti cambiamenti comuni per i file system, relativi al supporto di una nuova API per il mount, iomap e folios.
    • Nel server NFS è stato implementato un meccanismo di delega delle operazioni di scrittura per NFSv4, che migliora l'efficienza della cache di scrittura dei file per ridurre il traffico. È stata inclusa la supporto per l'operazione READ_PLUS, definita in NFS 4.2.
    • Nel file system Ceph è stata aggiunta la supporto per fscrypt.
  • Virtualizzazione e sicurezza
    • È stata aggiunta l'implementazione del meccanismo Shadow Stack, che permette di bloccare molte exploit utilizzando le funzionalità hardware dei processori Intel per proteggersi dalla sovrascrittura dell'indirizzo di ritorno da una funzione in caso di overflow del buffer nello stack. La protezione consiste nel fatto che dopo il passaggio del controllo a una funzione, l'indirizzo di ritorno viene salvato dal processore non solo nello stack normale, ma anche in uno ‘stack shadow’ separato, che non può essere modificato direttamente. Prima di uscire dalla funzione, l'indirizzo di ritorno viene estratto dallo stack shadow e confrontato con l'indirizzo di ritorno dallo stack principale. Un disallineamento degli indirizzi genera un'eccezione, bloccando situazioni in cui un exploit è riuscito a sovrascrivere l'indirizzo nello stack principale. Lo stack shadow hardware è supportato solo nelle build a 64 bit, mentre nelle build a 32 bit viene utilizzata la sua emulazione software.
    • Aggiunta la supporto per la compilazione con il compilatore Clang in modalità di protezione CFI (Control Flow Integrity), che blocca le violazioni dell'ordine normale di esecuzione (control flow) a causa di exploit che modificano i puntatori delle funzioni memorizzati in memoria.
    • Per l'architettura RISC-V è stata inclusa la randomizzazione della disposizione del kernel in memoria durante il caricamento.
    • Nel syscall seccomp() è stato aggiunto il flag SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP, che consente di gestire eventi da processi monitorati in modalità sincrona per un funzionamento più efficiente dello scheduler.
    • Nella funzione kmalloc() è stata assicurata la randomizzazione degli slab cache, complicando l'esploitation delle vulnerabilità nel kernel.
    • Dalle opzioni correlate all'abilitazione del sistema di controllo degli accessi forzato SELinux è stata rimossa la menzione dell'Agenzia per la sicurezza nazionale degli Stati Uniti. Poiché il progetto è in sviluppo da 20 anni sotto l'egida della comunità e gestito da manutentori indipendenti, è stata presa la decisione di passare all'uso del nome 'SELinux' invece di 'NSA SELinux' nei commenti e nella documentazione in Kconfig (ad esempio, la spiegazione del parametro di compilazione SECURITY_SELINUX è stata modificata da 'Supporto NSA SELinux' a 'Supporto SELinux').
    • Nel syscall userfaultfd() è stata aggiunta l'operazione UFFDIO_POISON, che consente di contrassegnare le pagine di memoria come 'avvelenate' (poisoned), utilizzabile per trasferire pagine di memoria danneggiate durante la migrazione di macchine virtuali da un sistema all'altro.
    • Nella sottosistema VFIO è stata aggiunta una nuova interfaccia simbolica (/dev/vfio/devices/vfioX) per la gestione dei dispositivi VFIO, che consente all'utente di aprire direttamente il file del dispositivo senza fare riferimento all'interfaccia di gruppo obsoleta /dev/vfio/$groupID.
    • In server Nel NFS è stata interrotta la supporto per i tipi obsoleti di crittografia Kerberos, che utilizzano algoritmi DES e 3DES.
    • Durante l'avvio in un ambiente di hypervisor Hyper-V, è stata aggiunta la supporto per i sistemi guest protetti tramite la tecnologia AMD SEV-SNP (Secure Nested Paging) e Intel TDX (Trusted Domain Extensions).
    • Quando si compila il kernel in modalità 'W=1', il compilatore include per impostazione predefinita i warning '-Wformat-overflow', '-Wformat-truncation', '-Wstringop-overflow' e '-Wrestrict'. Per tutte le compilazioni, è incluso il warning '-Wenum-conversion'.
  • Sottosistema di rete
    • L'implementazione della famiglia di indirizzi AF_XDP (eXpress Data Path) è stata ampliata con la possibilità di lavorare con pacchetti memorizzati in più buffer (ad esempio, in un buffer può trovarsi l'intestazione del pacchetto e in un altro i dati, oppure in una catena di più buffer possono essere collocati grandi jumbo frame Ethernet). I programmi che utilizzano socket AF_XDP possono ora ricevere e trasmettere pacchetti direttamente da più buffer.
    • Nel sottosistema BPF è stata aggiunta la supporto per la deframmentazione dei pacchetti IPv4 e IPv6, nonché la possibilità di filtrare pacchetti frammentati.
    • Nel BPF è stato aggiunto un nuovo gestore update_socket_protocol, che consente ai programmi BPF di modificare il protocollo richiesto per i nuovi socket. Ad esempio, un programma BPF può sostituire in modo trasparente il protocollo TCP con MPTCP (multipath TCP) per ottimizzare il traffico dell'applicazione. È stata anche aggiunta la gestione del routing dei pacchetti attraverso più flussi in MPTCP.
    • Il modulo ksmbd, che offre un'implementazione del server file basata sul protocollo SMB3, è stato rimosso dallo stato di sviluppo sperimentale. È stata aggiunta la supporto per unione delle operazioni di lettura (richieste 'read compound').
  • Attrezzature
    • Nella sottosistema DRM (Direct Rendering Manager) sono state apportate modifiche necessarie per il corretto funzionamento del driver open NVK con l'API grafica Vulkan per le schede grafiche NVIDIA. Inizialmente, il driver DRM Nouveau era pensato per l'implementazione di OpenGL, quindi manca di primitive necessarie per il funzionamento efficace dei driver Vulkan, come il supporto per oggetti sincronizzati e la gestione dello spazio degli indirizzi virtuali.
    • Nel driver AMDGPU è stata implementata la supporto per SDMA 6.1.0, HDP 6.1, SMUIO 14.0, PSP 14.0, IH 6.1 e GFX 9.4.3. È stato ristrutturato il codice di caricamento del firmware PSP (Platform Security Processor). È stata ampliata la supporto per la tecnologia di sincronizzazione adattativa FreeSync (aggiunta la supporto per Freesync Panel Replay V2).
    • Nel driver i915 è continuata l'implementazione della supporto per i chip Intel Meteor Lake. È stata migliorata la supporto per la tecnologia di protezione dei contenuti HDCP (High-bandwidth Digital Content Protection). È stato ristrutturato il codice per l'interazione con il display.
    • Le opzioni per disabilitare il caricamento del microcodice durante la fase di compilazione — MICROCODE_INTEL e MICROCODE_AMD sono state rimosse da Kconfig. Il kernel ora viene sempre compilato con il codice di caricamento del microcodice per i sistemi x86, ma il caricamento reale del microcodice può essere disabilitato specificando il parametro del kernel ‘dis_ucode_ldr’.
    • Nella sottosistema audio è stata aggiunta la supporto per il controllo dei dispositivi audio collegati attraverso il sottosistema IIO (Industrial I/O).
    • È stata aggiunta la supporto per le interfacce audio Intel LunarLake, Intel ArrowLake e AMD ACP5x, codec Cirrus Logic CS42L43, Realtek RT1017 e TI TAS2781, nonché amplificatori Cirrus Logic CS35L56 e winic aw88261. È stata aggiunta la supporto per ASoC AMD Van Gogh.
    • È stato aggiunto un driver USB MIDI 2.0 Gadget, che emula l'interfaccia USB MIDI 2.0, legato al dispositivo ALSA UMP rawmidi.
    • È stata aggiunta la supporto per i controller Ethernet Broadcom ASP 2.0 e Marvell 88Q2XXX.
    • È stata aggiunta la supporto per i pannelli Visionox R66451, TDO TL050HDV35, KD070FHFID015, Inanbo T28CP45TN89 e EDT ET028013DMA, controller di display Loongson e controller di touchscreen Azoteq IQS7222D/IQS7210A/7211A.
    • È stata aggiunta la supporto per i SoC ARM Qualcomm SM4450 (Snapdragon 4 Gen 2), TI AM62P5, Intel Agilex5, Qualcomm ipq5018, AN400 (Amlogic T7).
    • È stata aggiunta la supporto per le piattaforme ARM Samsung Galaxy Tab 3 8.0, FriendlyElec NanoPC T6, Amlogic A311D2, Khadas Vim4, Xiaomi SM7125, Facebook Yosemite 4, Orange Pi Zero 3, Radxa ROCK 4SE.

Contemporaneamente, la Fondazione Software Libero Latinoamericano ha creato una versione di kernel completamente libero 6.6 — Linux-libre 6.6-gnu, depurato da elementi di firmware e driver che contengono componenti non liberi o segmenti di codice, la cui area di applicazione è limitata dal produttore. Nella release 6.6 è stato aggiornata il codice di pulizia dei blob in vari driver e sottosistemi, ad esempio nei driver TI gigabit RU ethernet, MediaTek 792x wifi, Cirrus Logic cs42l43 mfd, cs35l56 HD-audio e aw88261 SoC. È stata effettuata la pulizia dei nomi dei blob nei file dts per l'architettura Aarch64. Sono stati rimossi i blob nei nuovi driver ivpu, nei driver bluetooth, nel driver per il touchscreen e nell'encoder/decoder Qualcomm Venus V4L2.

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