Dopo due mesi di sviluppo, Linus Torvalds ha rilasciato il kernel . Tra le modifiche più importanti: il rilevatore di condizioni di corsa KCSAN, un meccanismo universale per la consegna di notifiche nello spazio utente, supporto hardware per la crittografia inline, meccanismi di protezione avanzati per ARM64, supporto per il processore russo Baikal-T1, possibilità di montaggio separato delle istanze procfs, implementazione per ARM64 dei meccanismi di protezione Shadow Call Stack e BTI.
Il kernel 5.8 è diventato quello con il maggior numero di modifiche mai registrate nella storia del progetto. Queste modifiche non riguardano una singola sottosistema, ma coprono diverse parti del kernel, principalmente legate a riprogettazioni interne e pulizie. La maggior parte delle modifiche si osserva nei driver. Nella nuova versione sono stati accettati 17606 fix da 2081 sviluppatori, che hanno interessato circa il 20% di tutti i file nel repository del codice del kernel. La dimensione della patch è di 65 MB (le modifiche hanno interessato 16180 file, aggiungendo 1043240 righe di codice e rimuovendo 489854 righe). A titolo di confronto, nella versione 5.7 sono stati apportati 15033 fix, con una dimensione della patch di 39 MB. Circa il 37% di tutte le modifiche presentate in 5.8 riguardano i driver dei dispositivi, circa il 16% delle modifiche è relativo all'aggiornamento del codice specifico per le architetture hardware, l'11% è collegato allo stack di rete, il 3% ai file system e il 4% a sottosistemi interni del kernel.
:
- Virtualizzazione e sicurezza
- È stata garantita la bloccatura del caricamento dei moduli del kernel che presentano sezioni con codice in cui sono impostati contemporaneamente i bit che consentono l'esecuzione e la scrittura. Questa modifica è stata realizzata nell'ambito di un progetto più ampio volto a eliminare l'uso da parte del kernel di pagine di memoria che consentono contemporaneamente l'esecuzione e la scrittura.
- È ora possibile creare istanze separate di procfs, permettendo di utilizzare più punti di montaggio di procfs, montati con opzioni diverse, ma che riflettono un unico spazio dei nomi degli identificatori dei processi (pid namespace). In precedenza, tutti i punti di montaggio di procfs rispecchiavano solo una singola rappresentazione interna e qualsiasi modifica delle opzioni di montaggio influenzava tutti gli altri punti di montaggio associati allo stesso spazio dei nomi degli identificatori dei processi. Tra i contesti in cui potrebbe essere richiesta la montatura con opzioni diverse, si segnalano l'implementazione di un'isolamento leggero per sistemi integrati con la possibilità di nascondere in procfs determinati tipi di processi e nodi informativi.
- È stata implementata la supporto meccanismo per la piattaforma ARM64.
, fornito dal compilatore Clang per proteggere contro la sovrascrittura dell'indirizzo di ritorno da una funzione in caso di overflow del buffer nello stack. L'essenza della protezione consiste nel salvare, dopo il trasferimento del controllo alla funzione, l'indirizzo di ritorno in uno «stack ombra» separato e nel recuperare questo indirizzo prima dell'uscita dalla funzione. - Per la piattaforma ARM64 è stato aggiunto il supporto per le istruzioni (Branch Target Indicator) per proteggere l'esecuzione di set di istruzioni su cui non devono avvenire salti durante il branching. Il blocco dei salti verso sezioni arbitrarie di codice è stato implementato per contrastare la creazione di gadget negli exploit che utilizzano tecniche di programmazione orientata al ritorno (ROP - Return-Oriented Programming, in cui l'attaccante non cerca di inserire il proprio codice in memoria, ma opera su pezzi già esistenti di istruzioni macchina, terminanti con un'istruzione di ritorno, da cui viene costruita una catena di chiamate per ottenere la funzionalità desiderata).
- È stato aggiunto il supporto hardware per la crittografia inline dei dispositivi di blocco (). I dispositivi di crittografia inline sono solitamente integrati nell'unità, ma si collocano logicamente tra la memoria di sistema e il disco, effettuando la crittografia e decrittografia trasparenti delle operazioni di input/output basate su chiavi e algoritmi di crittografia definiti dal kernel.
- È stato aggiunto il parametro della riga di comando del kernel 'initrdmem', che consente di specificare l'indirizzo fisico di posizionamento dell'initrd in memoria durante il caricamento dell'immagine di avvio iniziale nella RAM.
- Nuove capability aggiunte: CAP_PERFMON per accedere al sottosistema perf e monitorare le performance. , che consente di eseguire alcune operazioni con BPF (ad esempio, il caricamento di programmi BPF), che in precedenza richiedevano i diritti CAP_SYS_ADMIN (ora le autorizzazioni CAP_SYS_ADMIN sono suddivise in combinazioni di CAP_BPF, CAP_PERFMON e CAP_NET_ADMIN).
- nuovo dispositivo virtio-mem, che consente di implementare il collegamento e disconnessione a caldo della memoria nei sistemi guest.
- Implementata la revoca delle operazioni di mappatura in /dev/mem, se il driver del dispositivo utilizza aree di memoria sovrapposte.
- Aggiunta protezione contro la vulnerabilità , che consente di recuperare i risultati dell'esecuzione di alcune istruzioni eseguite su un altro core della CPU.
- Memoria e servizi di sistema
- Nel documento che definisce le regole di formattazione del codice, raccomandazioni per l'uso di terminologia inclusiva. Si consiglia agli sviluppatori di evitare l'uso delle coppie ‘master/slave’ e ‘blacklist/whitelist’, così come il termine ‘slave’ da solo. Le raccomandazioni riguardano solo i nuovi utilizzi di questi termini. Le menzioni già presenti nel nucleo rimarranno intatte. Nel nuovo codice, l'uso dei termini contrassegnati è consentito se richiesto per mantenere l'API e l'ABI forniti all'utente, così come durante l'aggiornamento del codice per supportare hardware o protocolli esistenti, le cui specifiche richiedono l'uso di determinati termini.
- È incluso uno strumento di debug (Kernel Concurrency Sanitizer), progettato per la rilevazione dinamica all'interno del nucleo. L'uso di KCSAN è supportato durante la compilazione in GCC e Clang, e richiede l'aggiunta di modifiche specifiche nella fase di compilazione per tracciare l'accesso alla memoria (vengono applicati punti di interruzione che scattano durante la lettura o la modifica della memoria). L'attenzione principale nello sviluppo di KCSAN è stata rivolta alla prevenzione di falsi positivi, alla scalabilità e alla facilità d'uso.
- Aggiunto la consegna delle notifiche dal kernel allo spazio utente. Il meccanismo si basa su un driver pipe standard e consente di distribuire in modo efficace le notifiche dal kernel attraverso i canali aperti nello spazio utente. I punti di ricezione delle notifiche sono pipe aperte in una modalità speciale che consentono di accumulare i messaggi provenienti dal kernel in un buffer circolare. La lettura avviene tramite la normale funzione read(). Il proprietario del canale determina quali fonti nel kernel devono essere monitorate e può specificare un filtro per ignorare messaggi ed eventi di un certo tipo. Tra gli eventi, al momento sono supportate solo le operazioni con le chiavi, come l'aggiunta/rimozione di chiavi e la modifica dei loro attributi. Questi eventi sono previsti per essere utilizzati in GNOME.
- È stata continuata la sviluppo della funzionalità ‘pidfd’, che aiuta a gestire le situazioni di riutilizzo del PID (pidfd è legato a un processo specifico e non cambia, mentre il PID può essere associato a un altro processo dopo il completamento del processo attuale associato a quel PID). Nella nuova versione è stata aggiunta la supporto per l'utilizzo di pidfd per collegare un processo agli spazi dei nomi (è consentito specificare pidfd durante l'esecuzione della chiamata di sistema setns). L'uso di pidfd consente di gestire con una sola chiamata il collegamento del processo a più tipi di spazi dei nomi, riducendo notevolmente il numero di chiamate di sistema necessarie e realizzando il collegamento in modalità atomica (se si verifica un errore durante il collegamento a uno degli spazi dei nomi, non si collegheranno nemmeno gli altri).
- È stata aggiunta una nuova chiamata di sistema faccessat2(), che si distingue da
per un argomento aggiuntivo con flag corrispondenti alle raccomandazioni POSIX (in precedenza questi flag erano emulati nella libreria C, mentre la nuova faccessat2 consente di implementarli nel kernel). - Nella Cgroup configurazione di memory.swap.high, che può essere utilizzata per rallentare i processi che occupano troppo spazio nella sezione di swap.
- Nell'interfaccia dell'input/output asincrono aggiunta del supporto per la chiamata di sistema tee().
- È stato aggiunto il meccanismo «, destinato all'output nello spazio utente del contenuto delle strutture del kernel.
- possibilità di utilizzare un buffer circolare per lo scambio di dati tra i programmi BPF.
- al meccanismo , progettato per organizzare l'esecuzione parallela dei compiti nel kernel, aggiunto supporto per compiti multithreading con bilanciamento del carico.
- Nel meccanismo pstore, che consente di salvare informazioni di debug sulla causa di un crash in una zona di memoria, non perse tra i riavvii, backend per salvare informazioni su dispositivi a blocchi.
- Dalla branch del kernel PREEMPT_RT implementazione di blocchi locali.
- nuovo API per l'allocazione di buffer (AF_XDP), mirato a semplificare la scrittura di driver di rete con supporto per XDP (eXpress Data Path).
- Per l'architettura RISC-V è stato implementato il supporto per il debug dei componenti del kernel tramite KGDB.
- Fino al rilascio della versione 4.8, sono aumentati i requisiti per la versione di GCC che può essere utilizzata per compilare il kernel. In uno dei prossimi rilasci, si prevede di innalzare la soglia a GCC 4.9.
- Sottosistema disco, I/O e file system
- Nel Device Mapper è stato aggiunto un nuovo gestore dm-ebs (emulare la dimensione del blocco), che può essere utilizzato per emulare una dimensione del blocco logico più piccola (ad esempio, per emulare settori da 512 byte su dischi con dimensioni del settore di 4K).
- Nel file system F2FS è stato introdotto il supporto per la compressione utilizzando l'algoritmo LZO-RLE.
- In dm-crypt è supportata la gestione di chiavi criptate.
- In Btrfs è stata migliorata la gestione delle operazioni di lettura in modalità input/output diretto. Durante il montaggio è stato introdotto il controllo delle sottodirectory e delle cartelle remote rimaste senza genitore.
- In CIFS è stata aggiunta l'opzione "nodelete", che consente controlli di accesso di routine sul server, ma impedisce al client di eliminare file o directory.
- In Ext4 è stata migliorata la gestione degli errori durante l'uso della multithreading. In xattr è stato aggiunto il supporto per lo spazio dei nomi gnu.*, utilizzato in GNU Hurd.
- Per Ext4 e XFS è stato attivato il supporto per le operazioni DAX (accesso diretto al file system bypassando la cache delle pagine senza utilizzare il livello dei dispositivi a blocchi) in relazione a file e directory specifici.
- Nella chiamata di sistema è stato aggiunto il flag , specificato il quale l'informazione viene estratta utilizzando il meccanismo DAX.
- In EXFAT supporto per la verifica dell'area di avvio.
- In FAT caricamento anticipato degli elementi del FS. Il test di una chiavetta USB da 2 TB lenta ha mostrato una riduzione del tempo di test da 383 a 51 secondi.
- Sottosistema di rete
- Nel codice per la gestione dei ponti di rete supporto del protocollo (Media Redundancy Protocol), che consente di garantire l'affidabilità, interconnettendo più switch Ethernet.
- Nel sistema di gestione del traffico (Tc) una nuova azione "gate", che permette di definire intervalli temporali per l'elaborazione e il rigetto di determinati pacchetti.
- Nel kernel e nell'utilità ethtool è stato aggiunto il supporto per le funzioni di test dei cavi di rete collegati e per l'auto-diagnosi dei dispositivi di rete.
- Nel stack IPv6 è stato aggiunto il supporto per l'algoritmo MPLS (Multiprotocol Label Switching) per il routing dei pacchetti utilizzando la commutazione multiprotocollo per etichetta (l'MPLS era già supportato in IPv4).
- È stato aggiunto il supporto per la trasmissione di pacchetti IKE (Internet Key Exchange) e IPSec su TCP () per superare possibili blocchi di UDP.
- dispositivo di blocco di rete rnbd, che consente di organizzare l'accesso remoto a un dispositivo di blocco tramite trasporto RDMA (InfiniBand, RoCE, iWARP) e protocollo RTRS.
- nello stack TCP supporto della compressione dei range nelle risposte di riconoscimento selettivo (selective acknowledgment, SACK).
- Per IPv6 supporto TCP-LD (, Long Connectivity Disruptions).
- Attrezzature
- Nel driver DRM i915 per schede grafiche Intel è abilitato per impostazione predefinita il supporto per i chip Intel Tiger Lake (GEN12), per i quali è anche possibile utilizzare il sistema SAGV (System Agent Geyserville) per l'adattamento dinamico della frequenza e della tensione in base ai requisiti di consumo energetico o prestazioni.
- Nel driver amdgpu è stato aggiunto il supporto per il formato pixel FP16 e implementata la possibilità di lavorare con buffer crittografati nella memoria video (TMZ, Trusted Memory Zone).
- Aggiunto il supporto per i sensori di consumo energetico dei processori AMD Zen e Zen2, così come per i sensori di temperatura AMD Ryzen 4000 Renoir. Per AMD Zen e Zen2 è garantito il supporto per il recupero delle informazioni sul consumo energetico attraverso l'interfaccia (Running Average Power Limit).
- Nel driver Nouveau è stata aggiunta la supporto per il formato degli indicatori NVIDIA. Per gv100 è stata implementata la possibilità di utilizzare modalità di scansione interlacciata. È stata aggiunta la definizione di vGPU.
- Nel driver MSM (Qualcomm) è stata aggiunta la supporto per le GPU Adreno A405, A640 e A650.
- Framework interno per la gestione delle risorse DRM (Direct Rendering Manager).
- Aggiunta la supporto per gli smartphone Xiaomi Redmi Note 7 e Samsung Galaxy S2, oltre ai portatili Elm/Hana Chromebook.
- Aggiunti driver per i pannelli LCD: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
- Aggiunta la supporto per le piattaforme ARM e le piattaforme Renesas 'RZ/G1H', Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMC, Check Point L-50,
, Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI. - Aggiunta la supporto per il processore MIPS Loongson-2K (abbreviato Loongson64). Per CPU Loongson 3 è stata aggiunta la supporto per la virtualizzazione tramite hypervisor KVM.
-
supporto per il processore russo Baikal-T1 e il sistema su chip basato su di esso . Il processore Baikal-T1 contiene due core superscalari P5600 MIPS 32 r5, operanti a una frequenza di 1.2 GHz. Il chip include una cache L2 (1 MB), un controller di memoria DDR3-1600 ECC, 1 porta 10Gb Ethernet, 2 porte 1Gb Ethernet, un controller PCIe Gen.3 x4, 2 porte SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. Il processore fornisce supporto hardware per la virtualizzazione, istruzioni SIMD e un acceleratore hardware integrato per operazioni crittografiche, che supporta GOST 28147-89. Il chip è stato progettato utilizzando un core MIPS32 P5600 Warrior, con licenza da Imagination Technologies.
Fondazione per il software libero dell'America Latina
una variante — , ripulito da elementi di firmware e driver contenenti componenti o segmenti di codice non liberi, il cui utilizzo è limitato dal produttore. Nella nuova versione è stata disabilitata il caricamento di blob nei driver per Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Enhanced Asynchronous Sample Rate Converter, Maxim Integrated MAX98390 Speaker Aimplifier, Microsemi ZL38060 Connected Home Audio Processor, e I2C EEPROM Slave. È stato aggiornato il codice di pulizia dei blob nei driver e nei sottosistemi Adreno GPU, HabanaLabs Goya, touchscreen x86, vt6656 e btbcm.
Fonte: opennet.ru
