Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 5.13. Tra le modifiche più rilevanti: il file system EROFS, il supporto iniziale per i chip Apple M1, il controller cgroup per 'misc', l'interruzione del supporto per /dev/kmem, il supporto per le nuove GPU Intel e AMD, la possibilità di chiamare direttamente funzioni del kernel da programmi BPF, la randomizzazione dello stack del kernel per ogni chiamata di sistema, la possibilità di compilare in Clang con protezione CFI (Control Flow Integrity), il modulo LSM Landlock per ulteriori restrizioni sui processi, un dispositivo audio virtuale basato su virtio, e la modalità multi-shot in io_uring.
Nella nuova versione sono stati inclusi 17189 correttivi da 2150 sviluppatori (il numero più alto nella storia), la dimensione della patch è di 60 MB (le modifiche hanno riguardato 12996 file, aggiungendo 794705 righe di codice e rimuovendo 399590 righe). Circa il 47% di tutte le modifiche presentate in 5.13 riguardano i driver dei dispositivi, circa il 14% delle modifiche è relativo all'aggiornamento del codice specifico per architetture hardware, il 13% è legato allo stack di rete, il 5% ai file system e il 4% alle sottosistemi interni del kernel.
Novità principali:
- Sottosistema disco, I/O e file system
- È stata aggiunta la supporto per il file system EROFS (Enhanced Read-Only File System), proposto da Huawei per l'uso su partizioni disponibili in modalità sola lettura. Il nuovo file system supporta la memorizzazione dei dati in formato compresso e, rispetto a Ext4, mostra prestazioni simili nelle operazioni di lettura sequenziale, ma supera ampiamente Ext4 nel caso di accesso casuale ai dati. Ad esempio, con un livello di compressione di 4 e testando su server un disco rigido, il file system EROFS ha superato Ext4 in operazioni di lettura casuale di oltre sei volte, e in un'operazione su uno smartphone Android con Flash, quasi tre volte. Come in altri file system read-only, la struttura EROFS è notevolmente semplificata eliminando alcune aree di metadati durante l'implementazione, come la mappa dei blocchi liberi.
- Per il file system SMB3 è stata implementata l'opzione di montaggio "rasize", che consente di determinare la dimensione della finestra di lettura anticipata (readahead) per aumentare le prestazioni di alcuni tipi di carico.
- Nel file system ext4 è garantita la riscrittura degli elementi delle directory durante l'eliminazione dei file. In ext4 è inoltre consentito l'uso simultaneo della modalità di funzionamento senza distinzione tra maiuscole e minuscole e della crittografia.
- Nel file system exFAT è stata aggiunta la supporto per il comando ioctl FITRIM (discard), per informare il dispositivo su settori non utilizzati nel file system.
- Nel file system XFS è stata aggiunta la possibilità di recuperare spazio dall'ultima area di allocazione nel file system, il che rappresenta il primo passo verso l'implementazione della funzionalità di riduzione delle dimensioni delle partizioni esistenti con file system XFS.
- È stata aggiunta una nuova chiamata di sistema quotactl_path, che si differenzia da quotactl in quanto consente di gestire le quote non tramite un file di dispositivo speciale, ma specificando il percorso della directory di montaggio del file system.
- Nel meccanismo fanotify sono state ampliate le funzionalità disponibili per gli utenti non privilegiati. Ad esempio, analogamente a inotify, senza i diritti SYS_CAP_ADMIN è ora possibile monitorare gli eventi OPEN, ACCESS, MODIFY e CLOSE per file e directory.
- Memoria e servizi di sistema
- È stato aggiunto un nuovo controllore cgroup — «Misc» (CONFIG_CGROUP_MISC), progettato per limitare e monitorare le risorse scalari, che possono essere gestite utilizzando un semplice contatore e limitate impostando valori massimi consentiti. Un esempio dell'applicazione del nuovo controllore cgroup riguarda la gestione degli identificatori degli spazi degli indirizzi, utilizzati nel meccanismo AMD SEV (Secure Encrypted Virtualization).
- Nell'interfaccia di input/output asincrono io_uring, per le richieste POLL è stata implementata la modalità «multi-shot», in cui POLL non viene rimosso dopo la generazione di un evento, ma rimane attivo e può generare più eventi.
- È stato trasferito dal ramo realtime del kernel il codice che gestisce le interruzioni generate software nei thread del kernel, consentendo di preemptarle con processi di maggiore priorità.
- È stata aggiunta una libreria interna netfs, nella quale sono state trasferite le funzioni di uso comune nelle file system di rete.
- Per l'architettura PowerPC è stata implementata la supporto per gli spazi dei nomi temporali (time namespaces), che consentono di utilizzare un proprio tempo all'interno del contenitore.
- Per l'architettura RISC-V è stata implementata la supporto per kexec, crash dump, kprobe e l'esecuzione del kernel in loco (execute-in-place, esecuzione dal supporto originale, senza copia in RAM).
- Nei programmi BPF per il tracciamento è stata introdotta la possibilità di utilizzare uno storage dei dati locale per il compito (task-local storage), che offre prestazioni superiori attraverso l'associazione dei dati a uno specifico gestore BPF.
- È stato implementato un nuovo meccanismo per la chiamata diretta di funzioni del kernel dai programmi BPF, già utilizzato nell'implementazione di algoritmi di sovraccarico TCP. Per motivi di sicurezza, le funzioni chiamate devono essere esplicitamente definite in una lista bianca.
- Nel sistema di tracciamento delle funzioni ftrace è stata aggiunta l'opzione func-no-repeats, che permette di riflettere le chiamate consecutive ripetute di una funzione in forma di contatore.
- Nella system call userfaultfd(), progettata per gestire i page fault (accesso a pagine di memoria non allocate) nello spazio utente, è stata aggiunta la possibilità di gestire i fault parziali, in cui la pagina di memoria è presente ma non c'è un'entrata nella tabella delle pagine di memoria.
- Il supporto per il file speciale /dev/kmem è stato interrotto, il quale consentiva l'accesso all'intero spazio degli indirizzi del kernel. Questo file è stato dichiarato obsoleto e causa di problemi di sicurezza.
- Per i chip Intel è stato implementato un nuovo driver per la gestione della dissipazione del calore, che riduce la frequenza della CPU in caso di pericolo di surriscaldamento. A differenza del meccanismo attuale di attivazione TCC (Thermal Control Circuit), il nuovo driver manipola i valori relativi, cioè può abbassare la frequenza all'inizio di un significativo aumento della temperatura, senza attendere di superare il limite critico.
- Virtualizzazione e sicurezza
- È incluso un modulo LSM di isolamento delle applicazioni chiamato Landlock, che limita le interazioni con l'ambiente esterno di un gruppo di processi e progettato tenendo conto di meccanismi di isolamento come XNU Sandbox, FreeBSD Capsicum e OpenBSD Pledge/Unveil. La logica di concessione degli accessi è determinata tramite un programma BPF, ma a differenza di seccomp-bpf, Landlock non filtra le chiamate di sistema e i loro argomenti; piuttosto, consente di limitare l'uso degli oggetti del kernel, come le gerarchie dei file. Con Landlock, qualsiasi processo, incluso quello non privilegiato, può isolarsi in modo sicuro e prevenire la violazione dell'isolamento nel caso venga rilevata una vulnerabilità o una modifica dannosa nell'applicazione. Landlock consente a un processo di creare ambienti isolati e protetti, realizzati come un ulteriore strato sopra i meccanismi di controllo degli accessi esistenti. Ad esempio, un programma può impedire l'accesso ai file al di fuori della directory di lavoro.
- È stata aggiunta la possibilità di randomizzare gli offset nello stack del kernel durante la gestione delle chiamate di sistema, al fine di rendere più difficile gli attacchi allo stack. L'essenza della protezione proposta consiste nella selezione di un offset casuale nello stack per ogni chiamata di sistema, il che complica la determinazione della disposizione dello stack in memoria anche nel caso venga ottenuta informazione sugli indirizzi, poiché alla successiva chiamata di sistema l'indirizzo base dello stack cambierà. Per abilitare la randomizzazione sono stati proposti i parametri della riga di comando del kernel "randomize_kstack_offset=on/off" e la configurazione CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT. I costi operativi sono stimati in circa l'1% di perdita di prestazioni.
- È stato aggiunto il supporto per la compilazione del kernel con l'inclusione nel compilatore Clang del meccanismo di protezione CFI (Control Flow Integrity), che aggiunge una verifica prima di ogni chiamata indiretta a funzione per identificare alcune forme di comportamento indefinito, che potrebbero potenzialmente compromettere l'ordine normale di esecuzione (control flow) a causa dell'applicazione di exploit che modificano i puntatori a funzione memorizzati in memoria. Per abilitare il CFI è stato proposto il parametro CONFIG_CFI_CLANG.
- Nel servizio core fornito per la memorizzazione delle chiavi di crittografia (key ring), il meccanismo delle chiavi fidate (Trusted Keys) ora copre non solo le chiavi provenienti da moduli TPM, ma anche quelle dagli ambienti TEE (Trusted Execution Environment). Per gestire la fonte delle chiavi fidate è stato proposto il parametro di avvio «trusted.source». Inoltre, è stata aggiunta la possibilità di gestire le chiavi fidate nel formato ASN.1.
- È stato aggiunto un parametro per il pre-caricamento della lista dei certificati revocati durante l'avvio del core. È stato risolto il problema (CVE-2020-26541) riguardante l'ignorare nel blacklist UEFI Secure Boot i certificati forniti nel formato EFI_CERT_X509_GUID, che permetteva di avviare il sistema con un certificato revocato.
- Nella sottosistema crittografico del core è stato aggiunto il supporto per la verifica delle firme digitali ECDSA basate su curve ellittiche.
- È stata implementata la possibilità di verificare le politiche SELinux tramite la sottosistema IMA (Integrity Measurement Architecture), che assicura il mantenimento di un database di hash per la verifica dell'integrità dei dati.
- Sottosistema di rete
- Il supporto per la tecnologia WiMAX è stato rimosso, poiché non viene più utilizzato nelle reti pubbliche, e nel kernel l'unico driver che può utilizzare WiMAX rimane il driver obsoleto Intel 2400m. Nel configuratore di rete NetworkManager, il supporto per WiMAX è stato interrotto nel 2015. Attualmente, WiMax è praticamente stato completamente soppiantato da tecnologie come LTE, HSPA+ e Wi-Fi 802.11n.
- È stato aggiunto il driver per l'adattatore di rete MANA (Microsoft Azure Network Adapter).
- Nel driver ath11k è stata aggiunta la supporto per i moduli wireless Qualcomm QCN9074 con supporto 802.11ax.
- Nel driver iwlwifi è stata implementata la possibilità di scansione passiva dei canali nella banda 6GHz. Per l'Ucraina è stata aggiunta la possibilità di attivare/disattivare IEEE 802.11ax in base ai parametri nel BIOS.
- È stata ottimizzata la sottosistema XDP (eXpress Data Path), che consente di manipolare i pacchetti di rete prima che vengano elaborati dallo stack di rete del kernel Linux. I test condotti mostrano un aumento delle prestazioni di XDP del 4-8%. Per i dispositivi virtio, il guadagno di prestazioni dell'elaborazione software AF_XDP può raggiungere il 33%.
- Nel ICMP è stata implementata la supporto per messaggi PROBE estesi, definiti nella RFC 8335.
- Prosegue l'integrazione nel kernel MPTCP (MultiPath TCP), un'estensione del protocollo TCP per gestire le connessioni TCP con la consegna dei pacchetti simultaneamente su diversi percorsi attraverso diverse interfacce di rete collegate a diversi indirizzi IP. Nella nuova versione è stata aggiunta la supporto per sockopt per impostare opzioni TCP predefinite. È stata implementata la possibilità di resettare singoli sottoflussi (subflow).
- In netfilter è stata aggiunta la supporto alla gestione delle risorse tramite una gerarchia unificata di cgroups v2.
- In ethtool è stato implementato un'interfaccia per la lettura delle statistiche IEEE MIB con supporto per mlx5 e bnxt. Ai driver di rete è stato consentito di estrarre dati arbitrari da SFP EEPROM, manipolando non la coppia offset+dimensione, ma le pagine di memoria.
- Attrezzature
- È stato implementato il supporto iniziale per il chip ARM di Apple M1, che copre il controller delle interruzioni, il timer, UART, SMP, funzioni per la gestione delle I/O e MMIO. Il reverse engineering della GPU non è ancora completato; per l'output sono forniti supporto per framebuffer e console tramite porta seriale.
- Prosegue la pulizia del kernel da vecchi driver, sono stati rimossi i driver "gasket" (Google ASIC), "sysace", "umem" e diversi vecchi driver per porte seriali.
- Dopo 13 anni di presenza nella sezione staging, il driver «comedi» è stato stabilizzato e trasferito nel codice principale per supportare i dispositivi di acquisizione dati.
- Aggiunto il driver GUD (Generic USB Display) con l'implementazione di un driver di base per schermi e adattatori TV collegati tramite USB. Il driver fornisce proprietà DRM (Direct Rendering Manager) per la rotazione dell'immagine, gestione della luminosità, accesso a EDID, configurazione delle modalità video e connessione TV, che possono essere utilizzate come base per lo sviluppo di driver specifici per dispositivi.
- Aggiunto il driver audio «virtio» con l'implementazione di un dispositivo audio virtuale, che può essere utilizzato nei sistemi guest per l'uscita e la registrazione del suono senza necessità di accesso diretto alla scheda audio e senza emulazione.
- Nel driver amdgpu è stata aggiunta la supporto iniziale per la GPU Aldebaran (gfx90a). È stata attivata la supporto iniziale per la tecnologia di sincronizzazione adattiva FreeSync su HDMI (precedentemente disponibile solo per DisplayPort), che consente di regolare la frequenza di aggiornamento delle informazioni sullo schermo. È stata attivata la supporto per ASSR (Alternate Scrambler Seed Reset). È stata aggiunta una ioctl per richiedere funzionalità legate alla codifica e alla decodifica video. È stata aggiunta la modalità CONFIG_DRM_AMD_SECURE_DISPLAY per rilevare modifiche nei display che visualizzano informazioni critiche. È stata aggiunta la supporto per il meccanismo di risparmio energetico ASPM.
- Nel driver i915 per le schede grafiche Intel è stata attivata la supporto per i chip Intel Alderlake-S. È stata aggiunta la supporto per eDP MSO (Embedded DisplayPort Multi-SST Operation).
- È stata attivata la supporto per il controller di gioco Luna (Amazon), così come per i touchscreen Hycon HY46XX, ILITEK Lego Series e MStar MSG2638.
Contemporaneamente, il Fondo Latinoamericano per il Software Libero ha rilasciato una versione completamente libera del kernel 5.11 — Linux-libre 5.11-gnu, depurata da elementi di firmware e driver che contengono componenti non liberi o porzioni di codice di cui l'uso è limitato dal produttore. In questa nuova versione, è stato effettuato un aggiornamento del driver comedi. È stata interrotta la pulizia dei driver cyclades, isicom tty e i2400m wimax, che sono stati rimossi dal kernel. È stato aggiornato il codice per la pulizia dei blob nei driver e nei sotto-sistemi amdgpu, i915 csr, r8152 usb, mhi bus, x86 touchscreen e qualcomm arm64.
Fonte: opennet.ru
