Rilascio del kernel Linux 5.18

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 5.18. Tra le modifiche più rilevanti: è stata effettuata una grande pulizia delle funzionalità obsolete, il filesystem Reiserfs è stato dichiarato obsoleto, implementati eventi di tracciamento per i processi utente, aggiunto il supporto per il meccanismo di blocco degli exploit Intel IBT, attivato il rilevamento del buffer overflow nell'uso della funzione memcpy(), introdotto un meccanismo di tracciamento delle chiamate alle funzioni fprobe, migliorata la performance dello scheduler su CPU AMD Zen, incluso un driver per gestire le funzionalità della CPU Intel (SDS), integrati alcuni patch per la ristrutturazione dei file di intestazione e approvato l'uso dello standard C11.

Nella nuova versione sono state apportate 16.206 correzioni da 2.127 sviluppatori (nella versione precedente erano 14.203 correzioni da 1.995 sviluppatori). La dimensione della patch è di 108 MB (le modifiche hanno interessato 14.235 file, aggiungendo 1.340.982 righe di codice e rimuovendo 593.836 righe). Circa il 44% di tutte le modifiche presentate in 5.18 riguarda i driver dei dispositivi, circa il 16% delle modifiche si riferisce all'aggiornamento del codice specifico per le architetture hardware, l'11% è legato allo stack di rete, il 3% ai file system e il 3% ai sottosistemi interni del kernel.

Novità principali nel kernel 5.18:

  • Sottosistema disco, I/O e file system
    • Nel file system Btrfs è stato aggiunto il supporto per il passaggio di dati compressi durante le operazioni di send e receive. In precedenza, utilizzando send/receive, il lato mittente decomprimeva i dati archiviati in forma compressa, mentre il ricevente ri-comprimeva prima della scrittura. Nel kernel 5.18, alle applicazioni nello spazio utente che utilizzano le chiamate send/receive è stata fornita la possibilità di trasferire dati compressi senza ripackaging. Questa funzionalità è stata realizzata grazie a nuove operazioni ioctl, BTRFS_IOC_ENCODED_READ e BTRFS_IOC_ENCODED_WRITE, che consentono di leggere e scrivere direttamente informazioni negli extent.

      Inoltre, Btrfs ha migliorato le prestazioni di fsync. È stata aggiunta la possibilità di deduplicazione e di esecuzione di reflink (clonazione dei metadati di un file creando un collegamento ai dati esistenti senza duplicarli effettivamente) per l'intero storage, senza limiti ai punti di montaggio.

    • In modalità di ingresso diretto/uscita diretta (Direct I/O), è possibile accedere a file crittografati utilizzando la crittografia in linea fscrypt, in cui le operazioni di crittografia e decrittografia vengono eseguite dal controller dell'unità, e non dal kernel. Con la crittografia tradizionale gestita dal kernel, l'accesso a file crittografati tramite Direct I/O rimane impossibile, poiché l'accesso ai file avviene bypassando il meccanismo di buffering del kernel.
    • Nel server NFS, il supporto per il protocollo NFSv3 è abilitato per impostazione predefinita e non richiede un'abilitazione separata, ed è disponibile con l'attivazione generale di NFS. NFSv3 è considerata la versione principale e sempre supportata di NFS, mentre il supporto per NFSv2 potrebbe essere interrotto in futuro. È stata notevolmente aumentata l'efficienza nella lettura del contenuto delle directory.
    • Il file system ReiserFS è stato dichiarato obsoleto e sarà rimosso nel 2025. La sua classificazione come obsoleto ridurrà il carico di lavoro per la manutenzione delle modifiche comuni ai file system, relative al supporto del nuovo API per il montaggio, iomap e volumi.
    • Per il file system F2FS è stata implementata la possibilità di mappare gli identificatori degli utenti di file system montati, utilizzata per associare file di un determinato utente su una partizione di terzi con un altro utente nel sistema attuale.
    • Il codice per il conteggio delle statistiche nei gestori Device-mapper è stato rielaborato, il che ha migliorato notevolmente l'accuratezza del tracciamento in gestori come dm-crypt.
    • Per i dispositivi NVMe è stata aggiunta la supporto per checksum a 64 bit per la verifica dell'integrità.
    • Per il file system exfat è stata proposta una nuova opzione di montaggio «keep_last_dots», che vieta la rimozione dei punti alla fine del nome del file (in Windows i punti alla fine del nome vengono rimossi per impostazione predefinita).
    • In EXT4, le prestazioni della modalità fast_commit sono state migliorate e la scalabilità è stata aumentata. L'opzione di montaggio "mb_optimize_scan", che consente di migliorare le prestazioni in condizioni di alta frammentazione del file system, è stata adattata per lavorare con file con estensioni.
    • Supporto per i flussi di scrittura (write stream) nel sottosistema che gestisce i dispositivi a blocchi è stato interrotto. Questa funzionalità era stata proposta per gli SSD, ma non ha avuto diffusione e attualmente non ci sono dispositivi in circolazione che supportano questa modalità, rendendo improbabile una loro comparsa in futuro.
  • Memoria e servizi di sistema
    • È iniziata l'integrazione di un insieme di patch che consentono di ridurre significativamente il tempo di ricompilazione del kernel tramite la ristrutturazione della gerarchia dei file header e la diminuzione del numero di dipendenze incrociate. Nel kernel 5.18 sono incluse patch che ottimizzano la struttura dei file header dello scheduler (kernel/sched). Rispetto alla versione precedente, il consumo di tempo della CPU durante la compilazione del codice kernel/sched è diminuito del 61%, mentre il tempo effettivo si è ridotto del 3.9% (da 2.95 a 2.84 secondi).
    • Nel codice del kernel è consentito l'uso dello standard C11, pubblicato nel 2011. In precedenza, il codice incorporato nel kernel doveva conformarsi alla specifica ANSI C (C89), definita nel 1989. Negli script di build del kernel 5.18, l'opzione ‘—std=gnu89’ è stata sostituita con ‘—std=gnu11 -Wno-shift-negative-value’. È stata considerata la possibilità di utilizzare lo standard C17, ma in tal caso sarebbe stato necessario alzare la versione minima supportata di GCC; l'inclusione del supporto C11 rientra invece nei requisiti attuali per la versione di GCC (5.1).
    • È aumentata la performance di scheduling dei task sui processori AMD con microarchitettura Zen, nei quali per ogni nodo con canali di memoria locali vengono forniti diversi cache di ultimo livello (LLC, Last Level Cache). Nella nuova versione è stato risolto il disallineamento dell'LLC tra i nodi NUMA, il che ha portato a un significativo aumento delle prestazioni in alcune tipologie di carico.
    • Sono stati ampliati gli strumenti per il tracciamento delle applicazioni nello spazio utente. La nuova versione del kernel introduce la possibilità per i processi personalizzati di generare eventi di tracciamento (User events) e registrare dati nel buffer di tracciamento, che possono essere visualizzati tramite utility di tracciamento standard del kernel, come ftrace e perf. Gli eventi di tracciamento dallo spazio utente sono isolati dagli eventi di tracciamento del kernel. Lo stato degli eventi può essere visualizzato nel file /sys/kernel/debug/tracing/user_events_status, mentre la registrazione di un evento e la registrazione dei dati avviene tramite il file /sys/kernel/debug/tracing/user_events_data.
    • È stata aggiunta la meccanismo di tracciamento (probe) delle chiamate di funzione — fprobe. L'API di fprobe si basa su ftrace, ma è limitata alla possibilità di collegare gestori di callback ai punti di ingresso della funzione e alla fine della funzione. A differenza di kprobes e kretprobes, il nuovo meccanismo consente di utilizzare un singolo gestore per più funzioni.
    • È stata interrotta la supporto per vecchi processori ARM (ARMv4 e ARMv5) privi di un'unità di gestione della memoria (MMU). La supporto per i sistemi ARMv7-M senza MMU è mantenuta.
    • Il supporto per l'architettura NDS32 simile a RISC, utilizzata nei processori della Andes Technologies, è stato interrotto. Il codice è stato rimosso a causa della mancanza di supporto e della scarsa richiesta di NDS32 nel kernel Linux principale (gli utenti rimanenti utilizzano versioni specializzate del kernel fornite dai produttori di hardware).
    • Per impostazione predefinita è disabilitata la compilazione del kernel con supporto per il formato di file eseguibili a.out per le architetture alpha e m68k, in cui questo formato è ancora utilizzato. È probabile che il supporto per il formato a.out obsoleto venga completamente rimosso dal kernel a breve. I piani per la rimozione del formato a.out sono in discussione dal 2019.
    • Per l'architettura PA-RISC è stato implementato un supporto minimo per il meccanismo vDSO (virtual dynamic shared objects), che fornisce un insieme limitato di chiamate di sistema disponibili nello spazio utente senza cambio di contesto. Il supporto vDSO ha reso possibile l'esecuzione con uno stack non eseguibile.
    • È stato aggiunto il supporto per il meccanismo Intel HFI (Hardware Feedback Interface), che consente all'hardware di trasmettere al kernel informazioni sulle attuali prestazioni e sull'efficienza energetica di ogni CPU.
    • È stato aggiunto il driver per il meccanismo Intel SDSi (Silicon Software-Defined), che permette di gestire l'attivazione di funzionalità aggiuntive nel processore (come istruzioni specializzate e cache aggiuntiva). L'idea è che chip a un costo inferiore possano essere forniti con funzionalità avanzate bloccate, che possono poi essere "acquistate" e attivate senza la necessità di sostituire fisicamente il chip.
    • È stato aggiunto il driver amd_hsmp per supportare l'interfaccia AMD HSMP (Host System Management Port), che offre accesso a funzioni di gestione del processore attraverso un set di registri speciali, introdotti nei processori server AMD EPYC a partire dalla generazione Fam19h. Ad esempio, attraverso HSMP è possibile ottenere dati sul consumo energetico e sulla temperatura, impostare limiti di frequenza, attivare vari modi di aumento delle prestazioni e gestire i parametri di funzionamento della memoria.
    • Nell'interfaccia di input/output asincrono, io_uring implementa l'opzione IORING_SETUP_SUBMIT_ALL per la registrazione in un buffer circolare di un insieme di descrittori di file, insieme all'operazione IORING_OP_MSG_RING, che consente di inviare un segnale da un buffer circolare a un altro.
    • Nel meccanismo DAMOS (Schemi di Operazione basati sul Monitoraggio dell'Accesso ai Dati), che consente di liberare la memoria tenendo conto della frequenza di accesso alla memoria, sono state ampliate le capacità di controllo delle operazioni di memoria dallo spazio utente.
    • È stata integrata la terza serie di patch con l'implementazione del concetto di folean di pagina (page folios), che ricordano le pagine di memoria composte (compound pages), ma si distinguono per una semantica migliorata e un'organizzazione del lavoro più chiara. L'uso dei folean consente di accelerare la gestione della memoria in alcune sottosistemi del kernel. Nelle patch proposte è stata effettuata la transizione ai folean per funzioni interne di gestione della memoria, inclusa la variante della funzione get_user_pages(). È stato fornito supporto per la creazione di grandi folean nel codice di prelettura dei dati.
    • Nel sistema di build è stata aggiunta la supporto per le variabili d'ambiente USERCFLAGS e USERLDFLAGS, che consentono di passare ulteriori flag al compilatore e al linker.
    • Nel sottosistema eBPF, nel meccanismo BTF (BPF Type Format), che fornisce informazioni per la verifica dei tipi nel pseudocodice BPF, è stata implementata la possibilità di aggiungere annotazioni alle variabili che fanno riferimento ad aree di memoria nello spazio utente. Le annotazioni aiutano il sistema di verifica del codice BPF a identificare e controllare più accuratamente gli accessi alla memoria.
    • È stato introdotto un nuovo gestore per l'allocazione della memoria per memorizzare i programmi BPF caricati, che permette un utilizzo più efficiente della memoria in situazioni di caricamento di un numero elevato di programmi BPF.
    • Nella chiamata di sistema madvise(), è stato aggiunto il flag MADV_DONTNEED_LOCKED, che integra già l'esistente flag MADV_DONTNEED, attraverso il quale il kernel può essere informato in anticipo della pianificazione di liberazione di un blocco di memoria, ovvero che questo blocco non è più necessario e può essere utilizzato dal kernel. A differenza di MADV_DONTNEED, l'uso del flag MADV_DONTNEED_LOCKED è consentito per le pagine di memoria bloccate in RAM, che vengono espulse durante la chiamata a madvise senza modificare il loro stato di blocco e, in caso di un successivo accesso al blocco e generazione di un 'page fault', vengono restituiti mantenendo il vincolo. È stata inoltre aggiunta una modifica che consente l'utilizzo del flag MADV_DONTNEED con pagine di memoria di grandi dimensioni in HugeTLB.
  • Virtualizzazione e sicurezza
    • Per l'architettura x86 è stata aggiunta la supporto per il meccanismo di protezione del flusso di esecuzione dei comandi Intel IBT (Indirect Branch Tracking), che ostacola l'applicazione di tecniche di costruzione di exploit mediante l'uso di metodi di Programmazione Orientata al Ritorno (ROP, Return-Oriented Programming), in cui l'exploit è formato come una catena di chiamate a frammenti di istruzioni macchina già presenti in memoria, terminando con l'istruzione di ritorno dal controllo (di norma, si tratta delle conclusioni delle funzioni). Il principio del metodo di protezione implementato consiste nel bloccare i salti indiretti all'interno del corpo della funzione tramite l'aggiunta all'inizio della funzione di un'istruzione speciale ENDBR, consentendo l'esecuzione di un salto indiretto solo se il salto porta a questa istruzione (la chiamata indiretta tramite JMP e CALL deve sempre andare a finire sull'istruzione ENDBR, che si trova all'inizio stesso della funzione).
    • È stata attivata una verifica più rigorosa dei confini dei buffer nelle funzioni memcpy(), memmove() e memset(), eseguita in fase di compilazione quando è attivata l'opzione CONFIG_FORTIFY_SOURCE. La modifica apportata consiste nel controllare l'uscita dai confini degli elementi delle strutture di cui è noto il dimensionamento. Va notato che questa funzionalità implementata potrebbe bloccare tutti i problemi di overflow di buffer legati a memcpy() nel kernel, emersi negli ultimi tre anni.
    • È stata aggiunta la seconda parte del codice della nuova implementazione del generatore di numeri pseudocasuali RDRAND, responsabile del funzionamento dei dispositivi /dev/random e /dev/urandom. La nuova implementazione si distingue per l'unificazione del funzionamento di /dev/random e /dev/urandom e per l'aggiunta di protezioni contro la duplicazione nel flusso di numeri casuali all'avvio. di macchine virtuali e passando all'uso della funzione hash BLAKE2s invece di SHA1 per le operazioni di mescolamento dell'entropia. Questa modifica ha migliorato la sicurezza del generatore di numeri pseudocasuali, eliminando il problematico algoritmo SHA1 e escludendo la riscrittura del vettore di inizializzazione dell'RNG. Poiché l'algoritmo BLAKE2s supera SHA1 in termini di prestazioni, il suo utilizzo ha avuto un impatto positivo anche sulle performance.
    • Per l'architettura ARM64 è stata aggiunta la supporto per un nuovo algoritmo di autenticazione dei puntatori — 'QARMA3', che è più veloce dell'algoritmo QARMA mantenendo un adeguato livello di protezione. La tecnologia consente di utilizzare istruzioni specializzate ARM64 per la verifica degli indirizzi di ritorno mediante firme digitali, che sono memorizzate nei bit superiori inutilizzati dello stesso puntatore.
    • Per l'architettura ARM64 è stata implementata la supporto per la compilazione che include in GCC 12 la modalità di protezione contro la sovrascrittura dell'indirizzo di ritorno dalla funzione in caso di overflow del buffer nello stack. Il meccanismo di protezione consiste nel memorizzare, dopo il trasferimento di controllo alla funzione, l'indirizzo di ritorno in uno 'stack ombra' separato ed estrarre tale indirizzo prima di uscire dalla funzione.
    • È stato aggiunto un nuovo keyring – "machine", contenente le chiavi del proprietario del sistema (MOK, Machine Owner Keys), supportate nel bootloader shim. Le chiavi specificate possono essere utilizzate per la verifica della firma digitale dei componenti del kernel caricati nelle fasi successive al boot iniziale (ad esempio, i moduli del kernel).
    • È stata rimossa la supporto per le chiavi private asimmetriche per TPM, proposto in una versione obsoleta del TPM, con noti problemi di sicurezza e che non hanno trovato applicazione pratica.
    • È stata aggiunta la protezione dei dati di tipo size_t contro il overflow aritmetico. Nel codice vengono utilizzati i gestori size_mul(), size_add() e size_sub(), che permettono di eseguire in modo sicuro moltiplicazioni, somme e sottrazioni di grandezze di tipo size_t.
    • Durante la compilazione del kernel sono stati inclusi i flag "-Warray-bounds" e "-Wzero-length-bounds", che generano avvisi quando gli indici escono dai limiti dell'array e quando vengono utilizzati array di lunghezza zero.
    • Nel dispositivo virtio-crypto è stata aggiunta la supporto per la crittografia utilizzando l'algoritmo RSA.
  • Sottosistema di rete
    • Nella realizzazione dei bridge di rete è stata aggiunta la supporto per la modalità di blocco delle porte (locked mode), in cui l'utente può inviare traffico tramite una porta solo dall'indirizzo MAC autorizzato. È stata inoltre introdotta la possibilità di utilizzare più strutture per valutare lo stato del protocollo STP (Spanning Tree Protocol). In precedenza, per VLAN era possibile solo un'approccio diretto allo STP (1:1), in cui ogni VLAN veniva gestita in modo indipendente. Nella nuova versione è stato aggiunto il parametro mst_enable, che, se attivato, consente al modulo MST (Multiple Spanning Trees) di controllare lo stato delle VLAN e di adattare l'associazione delle VLAN al modello M:N.
    • Prosegue il lavoro per l'integrazione nelle stack di rete di strumenti per il monitoraggio delle cause di scarto dei pacchetti (codici reason). Il codice della causa viene trasmesso durante il rilascio della memoria associata al pacchetto e permette di tenere conto di situazioni come lo scarto di pacchetti a causa di errori nel riempimento dei campi nell'intestazione, l'individuazione di spoofing da parte del filtro rp_filter, checksum non validi, esaurimento della memoria, attivazione delle regole IPSec XFRM, numero di sequenza TCP errato, ecc.
    • È stata fornita la possibilità di trasferire pacchetti di rete da programmi BPF eseguiti dallo spazio utente in modalità BPF_PROG_RUN, in cui i programmi BPF vengono eseguiti nel kernel, ma restituiscono il risultato allo spazio utente. I pacchetti vengono trasferiti utilizzando il sottosistema XDP (eXpress Data Path). È supportata la modalità live per l'elaborazione dei pacchetti, in cui l'handler XDP può reindirizzare al volo i pacchetti di rete nello stack di rete o ad altri dispositivi. È anche possibile creare generatori software di traffico esterno o inserire frame di rete nello stack di rete.
    • Per i programmi BPF collegati a cgroups di rete, sono state proposte funzioni ausiliarie per impostare esplicitamente il valore restituito dalle chiamate di sistema, consentendo di fornire informazioni più complete sulle ragioni del blocco della chiamata di sistema.
    • Nella sottosistema XDP (eXpress Data Path) è stata aggiunta la supporto per pacchetti frammentati, memorizzati in più buffer, il che consente di elaborare Jumbo frame in XDP e applicare TSO/GRO (TCP Segmentation Offload/Generic Receive Offload) per XDP_REDIRECT.
    • Il processo di rimozione degli spazi di rete è stato notevolmente accelerato, una richiesta emersa in alcuni grandi sistemi con un elevato volume di traffico.
  • Attrezzature
    • Nel driver amdgpu è attivata per default la tecnologia di sincronizzazione adattativa FreeSync, che consente di regolare la frequenza di aggiornamento del display, garantendo fluidità e assenza di sfarfallio durante i giochi e la visione di video. Supporto stabile annunciato per la GPU Aldebaran.
    • Nel driver i915 è stata aggiunta la compatibilità con i chip Intel Alderlake N e le schede grafiche discrete Intel DG2-G12 (Arc Alchemist).
    • Nel driver nouveau è stata garantita la compatibilità con bitrate più elevati per le interfacce DP/eDP e il supporto per gli estensori di cavo lttprs (Link-Training Tunable PHY Repeaters).
    • Nel sottosistema drm (Direct Rendering Manager) nei driver armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen e vc4 è stato aggiunto il supporto per il parametro nomodeset, che consente di disabilitare il cambio delle modalità video a livello kernel e l'uso di mezzi per l'accelerazione hardware del rendering, mantenendo solo le funzionalità legate al framebuffer di sistema.
    • Aggiunta la supporto per ARM SoC Qualcomm Snapdragon 625/632 (utilizzato negli smartphone LG Nexus 5X e Fairphone FP3), Samsung Exynos 850, Samsung Exynos 7885 (utilizzato in Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek mt6582 (tablet Prestigio PMT5008 3G), Microchip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 e i.MXRTxxxx.
    • Aggiunta la supporto per dispositivi ARM e schede Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S, tablet Prestigio PMT5008 3G), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 e OSMC Vero 4K+), Aspeed (Quanta S6Q, ASRock ROMED8HM3), Marvell MVEBU/Armada (Ctera C200 V1 e V2 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903).
    • Aggiunta la supporto per i sistemi audio e codec AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, Renesas RZ/V2L, Texas Instruments TAS585M. Aggiunta l'implementazione iniziale del driver audio per il chip DSP Intel AVS. Aggiornato il supporto per i driver di Intel ADL e Tegra234, e apportate modifiche per migliorare il supporto audio sui dispositivi Dell, HP, Lenovo, ASUS, Samsung e Clevo.

    Contemporaneamente, il Fondo del Software Libero dell'America Latina ha formato una versione completamente libera del kernel 5.18 — Linux-libre 5.18-gnu, pulita da elementi di firmware e driver che contengono componenti non liberi o tratte di codice il cui ambito di applicazione è limitato dal produttore. In questa nuova versione sono stati ripuliti i driver per i pannelli MIPI DBI, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) e Realtek 8852a/8852c, schematici audio Intel AVS e Texas Instruments TAS5805M. È stata inoltre effettuata una pulizia dei file DTS per diversi SoC Qualcomm con processori basati sull'architettura AArch64. È stato aggiornato il codice di pulizia dei blob nei driver e nelle sottosistemi AMD GPU, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectrum Ethernet, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART.

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