Rilascio del kernel Linux 5.11

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 5.11. Tra le modifiche più notevoli: supporto per le enclavi Intel SGX, un nuovo meccanismo per intercettare le chiamate di sistema, un bus ausiliario virtuale, il divieto di assemblare moduli senza MODULE_LICENSE(), una modalità di filtraggio veloce per le chiamate di sistema in seccomp, cessazione del supporto per architettura ia64, trasferimento della tecnologia WiMAX al ramo “staging”, capacità di incapsulare SCTP in UDP.

La nuova versione include 15480 correzioni da 1991 sviluppatori, la dimensione della patch è di 72 MB (le modifiche hanno interessato 12090 file, sono state aggiunte 868025 righe di codice, 261456 righe sono state cancellate). Circa il 46% di tutte le modifiche introdotte nella versione 5.11 sono correlate ai driver di dispositivo, circa il 16% delle modifiche è correlato all'aggiornamento del codice specifico delle architetture hardware, il 13% è correlato allo stack di rete, il 3% è correlato ai file system e il 4% sono legati ai sottosistemi interni del kernel.

Principali innovazioni:

  • Sottosistema disco, I/O e file system
    • Sono state aggiunte diverse opzioni di montaggio a Btrfs da utilizzare durante il ripristino dei dati da un file system danneggiato: "rescue=ignorebadroots" per il montaggio, nonostante il danneggiamento di alcuni alberi root (extent, uuid, data reloc, dispositivo, csum, spazio libero), " Rescue=ignoredatacsums” per disabilitare il controllo del checksum dei dati e "rescue=all" per abilitare contemporaneamente le modalità 'ignorebadroots', 'ignoredatacsums' e 'nologreplay'. L'opzione di montaggio "inode_cache", precedentemente deprecata, è stata interrotta. Il codice è stato preparato per implementare il supporto per blocchi con metadati e dati inferiori alla dimensione di una pagina (PAGE_SIZE), nonché il supporto per la modalità di allocazione dello spazio in zone. Le richieste senza buffer (IO diretto) sono state spostate nell'infrastruttura iomap. L'esecuzione di numerose operazioni è stata ottimizzata; in alcuni casi l'accelerazione può raggiungere decine di punti percentuali.
    • XFS implementa il flag "needsrepair", che segnala la necessità di riparazione. Quando questo flag è impostato, il file system non può essere montato finché il flag non viene reimpostato dall'utilità xfs_repair.
    • Ext4 offre solo correzioni di bug e ottimizzazioni, oltre alla pulizia del codice.
    • È consentita la riesportazione dei file system montati su NFS (vale a dire, una partizione montata tramite NFS può ora essere esportata tramite NFS e utilizzata come cache intermedia).
    • La chiamata di sistema close_range(), che consente a un processo di chiudere contemporaneamente un intero intervallo di descrittori di file aperti, ha aggiunto un'opzione CLOSE_RANGE_CLOEXEC per chiudere i descrittori in modalità close-on-exec.
    • Il file system F2FS aggiunge nuove chiamate ioctl() per consentire il controllo dello spazio utente su quali file vengono archiviati in forma compressa. Aggiunta l'opzione di montaggio "compress_mode=" per scegliere se posizionare il gestore di compressione sul lato kernel o nello spazio utente.
    • Fornita la possibilità di montare Overlayfs da processi non privilegiati utilizzando uno spazio dei nomi utente separato. Per verificare la conformità con l'implementazione del modello di sicurezza, è stato effettuato un audit completo del codice. Overlayfs aggiunge anche la possibilità di eseguire utilizzando copie delle immagini del file system disabilitando facoltativamente il controllo UUID.
    • Il file system Ceph ha aggiunto il supporto per il protocollo msgr2.1, che consente l'utilizzo dell'algoritmo AES-GCM durante la trasmissione dei dati in forma crittografata.
    • Il modulo dm-multipath implementa la capacità di prendere in considerazione l'affinità della CPU (“affinità IO”) quando si sceglie il percorso per le richieste I/O.
  • Servizi di memoria e di sistema
    • È stato aggiunto un nuovo meccanismo di intercettazione delle chiamate di sistema, basato su prctl(), che consente di generare eccezioni dallo spazio utente quando si accede a una chiamata di sistema specifica ed emularne l'esecuzione. Questa funzionalità è richiesta in Wine e Proton per emulare le chiamate di sistema di Windows, necessarie per garantire la compatibilità con giochi e programmi che eseguono direttamente chiamate di sistema bypassando l'API di Windows (ad esempio, per proteggersi dall'uso non autorizzato).
    • La chiamata di sistema userfaultfd(), progettata per gestire gli errori di pagina (accesso alle pagine di memoria non allocate) nello spazio utente, ora ha la capacità di disabilitare la gestione delle eccezioni che si verifica a livello del kernel per rendere più difficile lo sfruttamento di determinate vulnerabilità.
    • Il sottosistema BPF ha aggiunto il supporto per l'archiviazione locale delle attività, che fornisce l'associazione dei dati a un gestore BPF specifico.
    • La contabilità del consumo di memoria da parte dei programmi BPF è stata completamente riprogettata: è stato proposto un controller cgroup invece di memlock rlimit per gestire l'uso della memoria negli oggetti BPF.
    • Il meccanismo BTF (BPF Type Format), che fornisce informazioni sul controllo del tipo nello pseudocodice BPF, fornisce il supporto per i moduli del kernel.
    • Aggiunto il supporto per le chiamate di sistema shutdown(), renameat2() e unlinkat() all'interfaccia I/O asincrona io_uring. Quando si chiama io_uring_enter(), è stata aggiunta la possibilità di specificare un timeout (è possibile verificare il supporto per l'argomento per specificare un timeout utilizzando il flag IORING_FEAT_EXT_ARG).
    • L'architettura ia64 utilizzata nei processori Intel Itanium è stata spostata nella categoria orfana, il che significa che i test sono cessati. Hewlett Packard Enterprise ha smesso di accettare ordini per nuove apparecchiature Itanium e Intel lo ha fatto l'anno scorso.
    • Il supporto per i sistemi basati sull'architettura MicroBlaze che non includono un'unità di gestione della memoria (MMU) è stato interrotto. Tali sistemi non si vedevano nella vita di tutti i giorni da molto tempo.
    • Per l'architettura MIPS, è stato aggiunto il supporto per i test di copertura del codice utilizzando l'utilità gcov.
    • Aggiunto il supporto al bus ausiliario virtuale per l'interfacciamento con dispositivi multifunzione che combinano funzionalità che richiedono driver diversi (ad esempio schede di rete con supporto Ethernet e RDMA). Il bus può essere utilizzato per assegnare un driver primario e secondario ad un dispositivo, in situazioni in cui l'utilizzo del sottosistema MFD (Multi-Function Devices) risulta problematico.
    • Per l'architettura RISC-V, è stato aggiunto il supporto per il sistema di allocazione della memoria CMA (Contiguous Memory Allocator), ottimizzato per allocare aree di memoria contigue di grandi dimensioni utilizzando tecniche di spostamento delle pagine di memoria. Per RISC-V, sono implementati anche strumenti per limitare l'accesso a /dev/mem e tenere conto del tempo di elaborazione dell'interruzione.
    • Per i sistemi ARM a 32 bit, è stato aggiunto il supporto per lo strumento di debug KASan (Kernel Address Sanitizer), che aiuta a identificare gli errori quando si lavora con la memoria. Per ARM a 64 bit, l'implementazione KASan è stata convertita per utilizzare i tag MTE (MemTag).
    • Aggiunta la chiamata di sistema epoll_pwait2() per consentire timeout con precisione al nanosecondo (la chiamata epoll_wait manipola i millisecondi).
    • Il sistema di compilazione ora visualizza un errore quando si tenta di creare moduli kernel caricabili in cui la licenza del codice non è definita utilizzando la macro MODULE_LICENSE(). D'ora in poi, anche l'utilizzo della macro EXPORT_SYMBOL() per le funzioni statiche causerà un errore di compilazione.
    • Aggiunto il supporto per la mappatura degli oggetti GEM dalla memoria utilizzata per l'I/O, che ha reso possibile velocizzare il lavoro con il framebuffer su alcune architetture.
    • Kconfig ha abbandonato il supporto per Qt4 (pur mantenendo il supporto per Qt5, GTK e Ncurses).
  • Virtualizzazione e sicurezza
    • È stato aggiunto il supporto per una modalità di risposta rapida alla chiamata di sistema seccomp(), che consente di determinare molto rapidamente se una determinata chiamata di sistema è consentita o vietata in base alla bitmap ad azione costante allegata al processo, che non richiede l'esecuzione un gestore BPF.
    • Componenti del kernel integrati per la creazione e la gestione di enclave basate sulla tecnologia Intel SGX (Software Guard eXtensions), che consente alle applicazioni di eseguire codice in aree di memoria crittografate isolate, alle quali il resto del sistema ha accesso limitato.
    • Nell'ambito di un'iniziativa per limitare l'accesso dallo spazio utente all'MSR (registro specifico del modello), scrivendo nel registro MSR_IA32_ENERGY_PERF_BIAS, che consente di modificare la modalità di efficienza energetica del processore (“normale”, “prestazioni”, “risparmio energetico”) , è proibito.
    • La possibilità di disabilitare la migrazione di attività ad alta priorità tra CPU è stata spostata dal ramo kernel-rt per i sistemi in tempo reale.
    • Per i sistemi ARM64 è stata aggiunta la possibilità di utilizzare tag MTE (MemTag, Memory Tagging Extension) per gli indirizzi di memoria del gestore del segnale. L'utilizzo di MTE è abilitato specificando l'opzione SA_EXPOSE_TAGBITS in sigaction() e permette di verificare il corretto utilizzo dei puntatori per bloccare lo sfruttamento di vulnerabilità causate dall'accesso a blocchi di memoria già liberati, buffer overflow, accessi prima dell'inizializzazione e utilizzo al di fuori della rete contesto attuale.
    • Aggiunto il parametro "DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING", che consente al sottosistema dm-verity di verificare le firme hash dei certificati inseriti nel portachiavi secondario. In pratica, il setup consente di verificare non solo i certificati integrati nel kernel, ma anche i certificati caricati durante il funzionamento, il che rende possibile aggiornare i certificati senza aggiornare l'intero kernel.
    • Modalità utente Linux ha aggiunto il supporto per la modalità suspend-to-idle, che consente di bloccare l'ambiente e utilizzare il segnale SIGUSR1 per riattivarsi dalla modalità di sospensione.
    • Il meccanismo virtio-mem, che consente di collegare e disconnettere la memoria alle macchine virtuali, ha aggiunto il supporto per Big Block Mode (BBM), che rende possibile trasferire o prelevare memoria in blocchi più grandi della dimensione della memoria del kernel blocco, necessario per ottimizzare VFIO in QEMU.
    • Il supporto per la crittografia CHACHA20-POLY1305 è stato aggiunto all'implementazione del kernel di TLS.
  • Sottosistema di rete
    • Per 802.1Q (VLAN) è stato implementato un meccanismo di gestione dei guasti di connessione (CFM, Connectivity Fault Management) che consente di identificare, verificare e isolare i guasti nelle reti con ponti virtuali (Virtual Bridged Networks). Ad esempio, il CFM può essere utilizzato per isolare i problemi nelle reti che abbracciano più organizzazioni indipendenti i cui dipendenti hanno accesso solo alle proprie apparecchiature.
    • Aggiunto supporto per incapsulare i pacchetti del protocollo SCTP in pacchetti UDP (RFC 6951), che consente di utilizzare SCTP su reti con traduttori di indirizzi meno recenti che non supportano direttamente SCTP, nonché di implementare SCTP su sistemi che non forniscono accesso diretto all'IP strato.
    • L'implementazione della tecnologia WiMAX è stata spostata nella fase di staging e se ne prevede la rimozione in futuro se non ci saranno utenti che richiederanno WiMAX. WiMAX non è più utilizzato nelle reti pubbliche e nel kernel l'unico driver con cui è possibile utilizzare WiMAX è il driver obsoleto Intel 2400m. Il supporto WiMAX è stato interrotto nel configuratore di rete NetworkManager nel 2015. Attualmente il WiMax è quasi completamente sostituito da tecnologie come LTE, HSPA+ e Wi-Fi 802.11n.
    • È stato svolto lavoro per ottimizzare le prestazioni di elaborazione del traffico TCP in entrata in modalità zerocopy, ovvero senza ulteriori copie su nuovi buffer. Per il traffico di medie dimensioni, che copre decine o diverse centinaia di kilobyte di dati, l'utilizzo di zerocopy invece di recvmsg() è notevolmente più efficace. Ad esempio, le modifiche implementate hanno consentito di aumentare del 32-60% l'efficienza dell'elaborazione del traffico in stile RPC con messaggi da 70 KB quando si utilizza zerocopy.
    • Aggiunte nuove chiamate ioctl() per creare bridge di rete che abbracciano più collegamenti PPP. La capacità proposta consente ai frame di spostarsi da un canale all'altro, ad esempio da una sessione PPPoE a una sessione PPPoL2TP.
    • Integrazione nel nucleo di MPTCP (MultiPath TCP), un'estensione del protocollo TCP per organizzare il funzionamento di una connessione TCP con la consegna di pacchetti contemporaneamente su più percorsi attraverso diverse interfacce di rete associate a diversi indirizzi IP. La nuova versione introduce il supporto per l'opzione ADD_ADDR per pubblicizzare gli indirizzi IP disponibili a cui è possibile connettersi quando si aggiungono nuovi flussi a una connessione MPTCP esistente.
    • Aggiunta la possibilità di configurare azioni quando viene superato il budget per il polling della connessione (busy-polling). La modalità SO_BUSY_POLL precedentemente disponibile significava passare a softirq quando il budget era esaurito. Per le applicazioni che devono continuare a utilizzare il polling, viene proposta una nuova opzione SO_PREFER_BUSY_POLL.
    • IPv6 implementa il supporto per le modalità SRv6 End.DT4 e End.DT6, utilizzate per creare VPN IPv4 L3 multiutente e dispositivi VRF (routing e inoltro virtuale).
    • Netfilter ha unificato l'implementazione delle espressioni di set, il che ha reso possibile specificare più espressioni per ciascun elemento delle liste di set.
    • Sono state aggiunte API allo stack wireless 802.11 per configurare i limiti di potenza SAR, nonché i parametri AE PWE e HE MCS. Il driver Intel iwlwifi ha aggiunto il supporto per la gamma 6GHz (Ultra High Band). Il driver Qualcomm Ath11k ha aggiunto il supporto per la tecnologia FILS (Fast Initial Link Setup, standardizzato come IEEE 802.11ai), che consente di eliminare i ritardi di roaming durante la migrazione da un punto di accesso a un altro.
  • Attrezzatura
    • Il driver amdgpu fornisce il supporto per l'APU AMD "Green Sardine" (Ryzen 5000) e la GPU "Dimgrey Cavefish" (Navi 2), nonché il supporto iniziale per l'APU AMD Van Gogh con core Zen 2 e GPU RDNA 2 (Navi 2). Aggiunto supporto per nuovi identificatori APU Renoir (basati su CPU Zen 2 e GPU Vega).
    • Il driver i915 per le schede video Intel supporta la tecnologia IS (Integer scaling) con l'implementazione di un filtro per aumentare la scala tenendo conto dello stato dei pixel vicini (interpolazione del vicino più vicino) per determinare il colore dei pixel mancanti. Il supporto per le schede Intel DG1 discrete è stato ampliato. È stato implementato il supporto per la tecnologia "Big Joiner", che è presente dai chip Ice Lake / Gen11 e consente l'uso di un transcoder per elaborare due flussi, ad esempio, per l'output su uno schermo 8K tramite una DisplayPort. Aggiunta una modalità per il passaggio asincrono tra due buffer nella memoria video (inversione asincrona).
    • Il nuovo driver ha aggiunto il supporto iniziale per le GPU NVIDIA basate sulla microarchitettura Ampere (GA100, GeForce RTX 30xx), finora limitato agli strumenti per il controllo delle modalità video.
    • Aggiunto il supporto per il protocollo 3WIRE utilizzato nei pannelli LCD. Aggiunto supporto per i pannelli novatek nt36672a, TDO tl070wsh30, Innolux N125HCE-GN1 e ABT Y030XX067A 3.0. A parte, da segnalare il supporto al pannello degli smartphone OnePlus 6 e 6T, che ha permesso di organizzare il caricamento del kernel non modificato sui dispositivi.
    • Aggiunto il supporto per il primo controller host USB4 discreto di Intel, Maple Ridge.
    • Aggiunto supporto per i codec audio Allwinner H6 I2S, Analog Devices ADAU1372, Intel Alderlake-S, GMediatek MT8192, NXP i.MX HDMI e XCVR, Realtek RT715 e Qualcomm SM8250.
    • Aggiunto supporto per schede, dispositivi e piattaforme ARM: Galaxy Note 10.1, Microsoft Lumia 950 XL, NanoPi R1, FriendlyArm ZeroPi, Elimo Initium SBC, Broadcom BCM4908, Mediatek MT8192/MT6779/MT8167, MStar Infinity2M, Nuvoton NPCM730, Marvell Armada 382, ​​​​Mikrotik basato su Marvell Prestera 98DX3236, server con Nuvoton NPCM750 BMC, Kontron i.MX8M Mini, Espressobin Ultra, Chromebook “Trogdor”, Kobol Helios64, Engicam PX30.Core.
    • Supporto integrato per la console di gioco Ouya basata su NVIDIA Tegra 3.

Allo stesso tempo, la Latin American Free Software Foundation ha formato una versione del kernel 5.11 completamente gratuita - Linux-libre 5.11-gnu, ripulita da elementi di firmware e driver contenenti componenti non liberi o sezioni di codice, la cui portata è limitata dal produttore. La nuova versione pulisce i driver per qat_4xxx (crypto), lt9611uxcm (bridge dsi/hdmi), ccs/smia++ (sensore), ath11k_pci, ricetrasmettitore audio nxp e controller mhi pci. Codice di pulizia blob aggiornato nei driver e sottosistemi amdgpu, btqca, btrtl, btusb, i915 csr. Disabilitati nuovi blob in m3 rproc, idt82p33 ptp clock e qualcomm arm64.

Fonte: opennet.ru

Aggiungi un commento