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 di processi EEVDF; un meccanismo di shadow stack per proteggere dagli exploit; supporto fs-verity in OverlayFS; implementazione di quote e xattr in tmpfs; preparazione dell'online fsck in XFS; potenziamento del monitoraggio dell'esportazione dei simboli "GPL-only"; supporto per i socket di rete in io_uring; randomizzazione della memoria in kmalloc(); ReiserFS è stata dichiarata obsoleta; nel Nouveau sono stati aggiunti primitive per il driver Vulkan NVK.

Nella nuova versione sono stati inclusi 15291 miglioramenti da 2058 sviluppatori, la dimensione della patch è di 39 MB (le modifiche hanno interessato 14844 file, sono state aggiunte 553359 righe di codice e sono state rimosse 284012 righe). Nell'edizione precedente c'erano 14674 miglioramenti 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 di dispositivo, circa il 17% delle modifiche sono relative all'aggiornamento del codice specifico per architetture hardware, l'11% è legato allo stack di rete, il 4% è relativo 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 di processi EEVDF (Earliest Eligible Virtual Deadline First), che sostituisce lo scheduler CFS (Completely Fair Scheduler), fornito a partire dal kernel 2.6.23. Il nuovo scheduler, nella scelta del successivo processo da eseguire, considera i processi che non hanno ricevuto sufficienti risorse di cpu o che hanno ricevuto ingiustamente troppo tempo di cpu. Nel primo caso viene forzato il passaggio di controllo al processo, mentre nel secondo viene posticipato. Il vecchio scheduler CFS utilizzava euristiche e regolazioni fini per identificare i processi che richiedevano attenzione separata, mentre il nuovo scheduler li monitora in modo più esplicito e non richiede regolazioni sottili. Si prevede che l'EEVDF riduca i ritardi nell'esecuzione dei compiti, con i quali il CFS ha avuto problemi di pianificazione.
    • Sono state apportate modifiche al trattamento dei simboli interni della categoria «GPL-only», mirate a complicare l'utilizzo da parte di moduli proprietari delle interfacce GPL per eludere le restrizioni di accesso ai sottosistemi del kernel, che ammettono solo codice sotto licenza GPL. Nella funzione symbol_get() è vietata la ricerca di simboli contrassegnati come GPL-only da parte di moduli proprietari e viceversa, i moduli GPL non potranno trovare simboli esportati da moduli proprietari.
    • Sono state aggiunte ulteriori impostazioni per le code di lavoro (unbound workqueue) al fine di migliorare l'efficienza del riutilizzo della cache della CPU nei grandi sistemi con più cache di terzo livello (L3). È stata inclusa anche l'utility tools/workqueue/wq_dump.py per verificare la configurazione corrente delle code di lavoro.
    • Nel sottosistema io_uring è stato aggiunto il supporto iniziale per operazioni e comandi specifici per i socket di rete. È stato aggiunto il sysctl io_uring_disabled per disabilitare io_uring a livello di sistema. Inoltre, in io_uring è stata notevolmente accelerata l'operazione di input/output diretto (Direct I/O) in modalità asincrona. L'incremento della larghezza di banda e la riduzione della latenza nelle operazioni di input/output dopo le modifiche raggiungono il 37%.
    • Per l'architettura PA-RISC è stato implementato un compilatore JIT per BPF.
    • Nella configurazione /sys/devices/system/cpu/smt/control è stata aggiunta la supporto per parametri numerici che definiscono il numero di thread disponibili per ciascun core della CPU (in precedenza erano supportati solo i valori «on» e «off» per abilitare e disabilitare il supporto per il multithreading simmetrico). Questa nuova funzionalità può essere applicata su alcuni processori PowerPC che supportano la modalità di hotplug per il multithreading simmetrico («hotplug SMT»), per abilitare selettivamente SMT su determinati core durante il funzionamento.
    • Proseguito il trasferimento delle modifiche dal ramo Rust-for-Linux, relativo all'uso del linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel (il supporto per Rust non è attivato di default e non comporta l'inclusione di Rust tra le dipendenze di build obbligatorie per il kernel). È stato effettuato il passaggio all'uso delle versioni Rust 1.71.1 e bindgen 0.65.1. È stata implementata la tipologia ‘Zeroable’. Aggiunti i macro procedurali ‘paste!’ e ‘#[derive(Zeroable)]’. Garantita la compatibilità con ‘#[pin_data]’. Aggiunte le funzioni di inizializzazione ‘{,pin_}init_array_from_fn()’ e il metodo ‘{,pin_}chain’. Ampliate le funzionalità del modulo ‘types’. Nel framework di unit testing kunit è stata aggiunta la possibilità di eseguire test dalla documentazione Rust.
    • Aggiunta la sottosistema ‘eventfs’, che consente di ridurre significativamente il consumo di memoria nel sistema di tracciamento, eliminando la memorizzazione delle strutture superflue utilizzate per rappresentare i punti di tracciamento nel file system. In precedenza, tali strutture venivano create per tutti i punti di tracciamento, indipendentemente dall'uso del tracciamento. Con eventfs, tali strutture possono essere create dinamicamente, solo quando è necessario.
    • Ampliate le capacità dello strumento perf.
    • Nel file /proc/pid/smaps è stata aggiunta un'informazione per diagnosticare l'efficacia 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 nella memoria che non può essere indirizzata direttamente e che non fornisce informazioni operative sulla disponibilità di spazio libero. Questo API era utilizzato solo in zswap, quindi si è deciso di utilizzare direttamente tale funzionalità in zswap, eliminando strati superflui.
    • Per l'architettura RISC-V è stato aggiunto il supporto per l'accesso ai contatori di prestazioni dallo spazio utente e la possibilità di posizionare il dump del kernel dopo un crash nell'area al di fuori dei 4GB.
    • Aggiunto il supporto iniziale per le istruzioni ARM SME (Scalable Matrix Extension).
    • Implementata la possibilità di utilizzare gli strumenti di debug KDB, KGDB, kcov, KFENCE e KASAN sui sistemi con architettura LoongArch.
    • Aggiunto il supporto per i file per il test del kernel nel sistema di integrazione continua GitLab, utilizzato nello sviluppo di driver grafici.
  • Sottosistema di disco, input/output e file system
    • Nel file system OverlayFS è stata aggiunta la supporto per il salvataggio degli hash fs-verity nell'attributo esteso (xattr) overlay.verity, il quale può essere utilizzato per verificare l'integrità e l'autenticità dei file nei livelli sottostanti di OverlayFS sfruttando hash crittografici e chiavi. Pertanto, ora OverlayFS include tutte le modifiche necessarie per il progetto Composefs, affinché operi come un'estensione del file system OverlayFS e EROFS.
    • Nel file system XFS è stata preparata l'implementazione della possibilità di utilizzare lo strumento fsck per controllare e correggere i problemi riscontrati in modalità online, senza smontare il file system. Inoltre, in XFS è stata implementata 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 carico.
    • Nel file system tmpfs è stata aggiunta la supporto per attributi estesi personalizzati (user xattrs), I/O diretto e quote legate all'utente e al gruppo. Sono stati stabilizzati gli offset delle directory, risolvendo i problemi di esportazione di tmpfs tramite NFS.
    • Nell'API di gestione del montaggio, per aumentare la sicurezza, è stato aggiunto il flag FSCONFIG_CMD_CREATE_EXCL, che vieta la condivisione del superblocco in più punti di montaggio (vietando il collegamento di una partizione a più punti di montaggio). Nello strumento mount è stata proposta l'opzione "—exclusive" per abilitare questo flag.
    • Nel sottosistema VFS è stata aggiunta la supporto per modificare in modo dinamico i parametri del tempo di accesso e di modifica (atime, mtime). In precedenza, i dati temporali venivano riflessi con una certa latenza, il che rendeva difficile tenere traccia dell'aggiornamento dei dati nella cache in sistemi come NFS (a causa del ritardo nell'individuazione delle modifiche al file, il sistema poteva erroneamente considerare i dati nella cache come attuali). Questa nuova funzionalità è disponibile per Btrfs, Ext4, tmpfs e XFS.
    • In Btrfs è stata dichiarata obsoleta la meccanismo incorporato di verifica dell'integrità, abilitato durante la compilazione attraverso il parametro BTRFS_FS_CHECK_INTEGRITY. Questo meccanismo non è più supportato, non viene testato e crea un ulteriore carico sulla CPU e sulla 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 le operazioni di allocazione della memoria sono state accelerate durante la scrittura alla fine del file.
    • Nel sottosistema FUSE è stata aggiunta la supporto all'attributo btime ("birth time"), che definisce il tempo di creazione dell'inode.
    • È vietata la modifica dei diritti di accesso per i collegamenti simbolici.
    • È stata aggiunta la chiamata di sistema fchmodat2(), che si distingue dalla chiamata di sistema fchmodat() per un argomento aggiuntivo che specifica i flag. Tra i flag, attualmente sono supportati solo AT_SYMLINK_NOFOLLOW e AT_EMPTY_PATH, che consentono di implementare senza scappatoie nella funzione libc fchmodat() il divieto di dereferenziare collegamenti simbolici e la possibilità di utilizzare il descrittore di file specificando un percorso vuoto.
    • Nel file system EROFS (Extendable Read-Only File System), destinato all'uso su partizioni disponibili solo in modalità di sola lettura, è stata aggiunta la supporto all'algoritmo di compressione Deflate. Per accelerare la ricerca di attributi estesi è stata utilizzata una struttura probabilistica nota come bloom filter.
    • È stata aggiunta l'impostazione CONFIG_BUFFER_HEAD, che consente di compilare il kernel senza utilizzare la struttura buffer_head. Durante la compilazione senza buffer_head, è possibile utilizzare dispositivi a blocchi e alcuni FS, come xfs, btrfs, cramfs, erofs e squashfs.
    • Nel driver dei dispositivi a blocchi ublk, che consente di spostare la logica specifica lato processo nello spazio utente, è stata aggiunta la supporto per i dispositivi di archiviazione zonati (separazione in zone di gruppi di blocchi o settori, nei quali è consentita solo l'aggiunta sequenziale di dati con l'aggiornamento dell'intero gruppo di blocchi).
    • L'implementazione del file system ReiserFS è stata spostata dalla categoria dei supportati a quella degli obsoleti (Obsolete). La cessazione del supporto per ReiserFS è prevista per il 2025. Come motivo per il trasferimento di ReiserFS alla categoria degli obsoleti viene citata la stagnazione nella manutenzione di questo FS, il problema irrisolto del 2038, la mancanza di possibilità di garantire la resilienza e la volontà di ridurre i costi di manutenzione per le modifiche comuni ai file system relative al supporto di un nuovo API per il montaggio, iomap e folios.
    • Nel server NFS è stato implementato un meccanismo di delega delle operazioni di scrittura per NFSv4, che aumenta l'efficienza della memorizzazione nella cache delle scritture di file per ridurre il traffico. È stata inclusa la supporto per l'operazione READ_PLUS, definita in NFS 4.2.
    • È stata aggiunta la supporto per fscrypt nel file system Ceph.
  • Virtualizzazione e sicurezza
    • È stata implementata la meccanismo Shadow Stack, che consente di bloccare il funzionamento di molti exploit, utilizzando le capacità hardware dei processori Intel per proteggere dalla sovrascrittura dell'indirizzo di ritorno da una funzione in caso di overflow del buffer nello stack. La protezione consiste nel fatto che, dopo aver trasferito il controllo alla funzione, l'indirizzo di ritorno viene salvato dal processore non solo nello stack normale, ma anche in uno stack "ombra" separato, che non può essere modificato direttamente. Prima dell'uscita dalla funzione, l'indirizzo di ritorno viene estratto dallo stack ombra e confrontato con l'indirizzo di ritorno dello stack principale. La non corrispondenza degli indirizzi porta alla generazione di un'eccezione, bloccando le situazioni in cui un exploit è riuscito a sovrascrivere l'indirizzo nello stack principale. Lo stack ombra hardware è supportato solo nelle build a 64 bit, mentre nelle build a 32 bit viene utilizzata la sua emulazione software.
    • È stato aggiunto il supporto per la compilazione 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 seguito dell'uso di exploit che modificano i puntatori a funzioni memorizzati in memoria.
    • Per l'architettura RISC-V è stata abilitata la randomizzazione della posizione del kernel in memoria al momento dell'avvio.
    • Alla chiamata di sistema seccomp() è stata aggiunta l'opzione SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP, che consente di gestire eventi da processi monitorati in modalità sincronizzata per un funzionamento più efficiente dello scheduler.
    • Nella funzione kmalloc() è stata implementata la randomizzazione dei slab-cache, rendendo più difficile l'esploitazione delle vulnerabilità nel kernel.
    • Dalle opzioni relative all'attivazione del sistema di controllo accessi obbligatorio SELinux è stata rimossa la menzione dell'Agenzia per la sicurezza nazionale degli Stati Uniti. Poiché il progetto si sviluppa già da 20 anni sotto l'egida della comunità e viene mantenuto da maintainer indipendenti, è stato deciso di passare all'uso del nome "SELinux" invece di "NSA SELinux" nei commenti e nella documentazione in Kconfig (ad esempio, la descrizione della variabile di assemblaggio SECURITY_SELINUX è stata modificata da "NSA SELinux Support" a "SELinux Support").
    • Alla chiamata di sistema userfaultfd() è stata aggiunta l'operazione UFFDIO_POISON, che consente di contrassegnare le pagine di memoria come "avvelenate" (poisoned), il che può essere utilizzato per il trasferimento di pagine di memoria danneggiate durante la migrazione macchine virtuali da un sistema all'altro.
    • È stato aggiunto un nuovo'interfaccia simbolica alla sottosistema VFIO (\/dev\/vfio\/devices\/vfioX) per la gestione dei dispositivi VFIO, che consente all'utente di aprire direttamente il file del dispositivo, senza ricorrere all'interfaccia di gruppo obsoleta \/dev\/vfio\/$groupID.
    • In server NFS ha interrotto il supporto per i tipi obsoleti di crittografia Kerberos, che utilizzano gli algoritmi DES e 3DES.
    • È stata aggiunta la supporto per i sistemi guest protetti mediante la tecnologia AMD SEV-SNP (Secure Nested Paging) e Intel TDX (Trusted Domain Extensions) quando si avvia nell'ambiente hypervisor Hyper-V.
    • Nella compilazione del kernel in modalità "W=1", il compilatore include per impostazione predefinita gli avvisi "-Wformat-overflow", "-Wformat-truncation", "-Wstringop-overflow" e "-Wrestrict". Per tutte le compilazioni, è attivato l'avviso "-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 diversi buffer (ad esempio, un buffer può contenere l'intestazione del pacchetto e un altro i dati, oppure una catena di più buffer può contenere grandi jumbo frame Ethernet). Le applicazioni che utilizzano socket AF_XDP possono ora ricevere e trasmettere pacchetti direttamente da diversi buffer.
    • Nella sottosistema BPF è stata aggiunta la supporto per la deframmentazione dei pacchetti IPv4 e IPv6, oltre alla possibilità di filtrare i pacchetti frammentati.
    • È stato aggiunto un nuovo gestore update_socket_protocol nel BPF, che consente ai programmi BPF di modificare il protocollo richiesto per i nuovi socket. Ad esempio, un programma BPF può sostituire trasparentemente il protocollo TCP con MPTCP (multipath TCP) per ottimizzare il traffico dell'applicazione. È stata aggiunta anche la supporto per la gestione della routing dei pacchetti attraverso diversi flussi in MPTCP.
    • È stato rimosso il segno di sviluppo sperimentale dal modulo ksmbd, che offre un'implementazione funzionante a livello di kernel del server di file basato su protocollo SMB3. È stata aggiunta la supporto per l'aggregazione delle operazioni di lettura (richieste "read compound").
  • Apparecchiatura
    • Sono state apportate modifiche al sottosistema DRM (Direct Rendering Manager) necessarie per il funzionamento efficace del driver open NVK con l'implementazione dell'API grafica Vulkan per le schede grafiche NVIDIA. Inizialmente, il driver DRM Nouveau era progettato per l'implementazione di OpenGL, quindi manca dei primitivi necessari per il funzionamento efficace dei driver Vulkan, ad esempio il supporto per oggetti sincronizzati e la gestione dello spazio degli indirizzi virtuali.
    • Nel driver AMDGPU è supportata la SDMA 6.1.0, HDP 6.1, SMUIO 14.0, PSP 14.0, IH 6.1 e GFX 9.4.3. È stato rielaborato il codice di caricamento dei firmware PSP (Platform Security Processor). È stato ampliato il supporto per la tecnologia di sincronizzazione adattiva FreeSync (aggiunto il supporto per Freesync Panel Replay V2).
    • Nel driver i915 continua l'implementazione del supporto per i chip Intel Meteor Lake. Migliorato il supporto per la tecnologia di protezione dei contenuti HDCP (High-bandwidth Digital Content Protection). Rielaborato il codice per l'interazione con il display.
    • Rimosse le opzioni Kconfig per disattivare il caricamento del microcodice in fase di compilazione — MICROCODE_INTEL e MICROCODE_AMD. Il kernel ora viene sempre compilato con il codice di caricamento del microcodice per sistemi x86, ma il caricamento effettivo del microcodice può essere disattivato specificando il parametro del kernel ‘dis_ucode_ldr’.
    • Nella sottosistema audio è stata aggiunta la possibilità di gestire le periferiche audio collegate tramite la sottosistema IIO (Industrial I/O).
    • Aggiunto il supporto per le interfacce audio Intel LunarLake, Intel ArrowLake e AMD ACP5x, codec Cirrus Logic CS42L43, Realtek RT1017 e TI TAS2781, oltre agli amplificatori Cirrus Logic CS35L56 e winic aw88261. Aggiunto il supporto ASoC AMD Van Gogh.
    • Aggiunto il driver USB MIDI 2.0 Gadget, che emula l'interfaccia USB MIDI 2.0, associato al dispositivo ALSA UMP rawmidi.
    • Aggiunto il supporto per i controller Ethernet Broadcom ASP 2.0 e Marvell 88Q2XXX.
    • Aggiunto il supporto per i pannelli Visionox R66451, TDO TL050HDV35, KD070FHFID015, Inanbo T28CP45TN89 e EDT ET028013DMA, controller di display Loongson e controller di touch screen Azoteq IQS7222D/IQS7210A/7211A.
    • Aggiunto il supporto per il SoC ARM Qualcomm SM4450 (Snapdragon 4 Gen 2), TI AM62P5, Intel Agilex5, Qualcomm ipq5018, AN400 (Amlogic T7).
    • Aggiunto il 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, il Fondo latinoamericano per il software libero ha formato una versione completamente libera del kernel 6.6 — Linux-libre 6.6-gnu, ripulito da elementi di firmware e driver contenenti componenti o sezioni di codice non liberi, il cui ambito di applicazione è limitato dal produttore. Nella versione 6.6 è stato aggiornato 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 una pulizia dei nomi dei blob nei file dts per l'architettura Aarch64. Rimosse le blob nei nuovi driver ivpu, nei driver bluetooth, nel driver per i touch screen e nel codificatore/decodificatore Qualcomm Venus V4L2.

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