Dopo due mesi di sviluppo, Linus Torvalds rilascio del kernel . Tra le modifiche più significative: il detector di stati di race 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 montare separatamente le istanze di procfs, implementazione per ARM64 dei meccanismi di protezione Shadow Call Stack e BTI.
Il kernel 5.8 è diventato il più grande in termini di numero di modifiche di tutti i kernel nella storia del progetto. Le modifiche non sono legate a un'unica sottosistema, ma coprono varie parti del kernel e sono principalmente collegate a rielaborazioni interne e pulizie. La maggiore 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, sono state aggiunte 1043240 righe di codice, eliminate 489854 righe). A titolo di confronto, nella versione 5.7 erano stati apportati 15033 fix, e la dimensione della patch era di 39 MB. Circa il 37% di tutte le modifiche presentate in 5.8 sono legate ai driver dei dispositivi, circa il 16% riguardano l'aggiornamento del codice specifico per le architetture hardware, l'11% è legato allo stack di rete, il 3% ai file system e il 4% ai sottosistemi interni del kernel.
:
- Virtualizzazione e sicurezza
- È stata garantita la blocco del caricamento dei moduli del kernel che contengono sezioni di codice in cui sono impostati contemporaneamente i bit per l'esecuzione e la scrittura. La modifica è stata realizzata nell'ambito di un progetto più ampio per eliminare l'uso da parte del kernel di pagine di memoria che consentono contemporaneamente l'esecuzione e la scrittura.
- È stata creata la possibilità di generare istanze separate di procfs, consentendo di utilizzare più punti di montaggio di procfs, montati con diverse opzioni, ma che riflettono uno spazio di nomi identificale per i processi (pid namespace). In precedenza, tutti i punti di montaggio di procfs riflettevano solo una rappresentazione interna e qualsiasi modifica dei parametri di montaggio influiva su tutti gli altri punti di montaggio collegati allo stesso spazio di nomi identificativo dei processi. Tra le aree in cui può essere richiesto il montaggio con diverse opzioni c'è l'implementazione di un'isolamento leggero per sistemi embedded, con la possibilità di nascondere in procfs alcuni tipi di processi e nodi informativi.
- Per la piattaforma ARM64 è stato implementato il supporto al meccanismo
, fornito dal compilatore Clang per proteggere dalla scrittura non autorizzata dell'indirizzo di ritorno di una funzione in caso di overflow del buffer nello stack. La protezione si basa sulla memorizzazione, dopo la cessione del controllo alla funzione, dell'indirizzo di ritorno su uno stack "ombra" separato, e sul recupero di tale 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 insiemi di istruzioni su cui non devono avvenire salti durante le diramazioni. Il blocco dei salti verso aree casuali 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 collocare il proprio codice in memoria, ma opera su frammenti esistenti di istruzioni, che si concludono con l'istruzione di ritorno, combinandoli in una catena di chiamate per ottenere la funzionalità desiderata).
- È stato aggiunto il supporto per l'hardware per la crittografia in linea dei dispositivi a blocchi (). I dispositivi di crittografia in linea sono generalmente integrati nell'unità di archiviazione, ma vengono logicamente posizionati tra la memoria di sistema e il disco, effettuando 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 di initrd in memoria quando si colloca l'immagine di avvio iniziale nella RAM.
- Aggiunte nuove capability: CAP_PERFMON per accedere al sottosistema perf e eseguire il monitoraggio delle prestazioni. , 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 state suddivise in una combinazione di CAP_BPF, CAP_PERFMON e CAP_NET_ADMIN).
- un nuovo dispositivo virtio-mem, che consente di implementare il collegamento e lo scollegamento a caldo della memoria nei sistemi guest.
- Implementato il ritiro delle operazioni di mappatura in /dev/mem, se il driver del dispositivo utilizza aree di memoria sovrapposte.
- Aggiunta protezione da vulnerabilità , che consente di ripristinare i risultati dell'esecuzione di alcune istruzioni eseguite su un altro core CPU.
- Memoria e servizi di sistema
- Nel documento che definisce le regole di formattazione del codice, raccomandazioni per l'uso di terminologia inclusiva. Si sconsiglia agli sviluppatori di utilizzare i termini ‘master/slave’ e ‘blacklist/whitelist’, così come il termine ‘slave’ da solo. Le raccomandazioni riguardano solo il nuovo utilizzo di questi termini. Eventuali menzioni già presenti nel kernel di queste parole rimarranno intatte. Nel nuovo codice, l'uso dei termini evidenziati è consentito se richiesto per mantenere l'API e l'ABI rilasciati nello spazio utente, così come durante l'aggiornamento del codice per supportare l'hardware o i protocolli esistenti, le cui specifiche richiedono l'uso di determinati termini.
- Incluso uno strumento di debug (Kernel Concurrency Sanitizer), progettato per il rilevamento dinamico all'interno del kernel. L'uso di KCSAN è supportato durante la compilazione con GCC e Clang, e richiede l'aggiunta di modifiche specifiche nella fase di compilazione per monitorare l'accesso alla memoria (sono utilizzati breakpoint che si attivano durante la lettura o la modifica della memoria). L'attenzione principale nello sviluppo di KCSAN è stata rivolta alla prevenzione di falsi allarmi, scalabilità e facilità d'uso.
- Aggiunto notifiche di consegna dal kernel allo spazio utente. Il meccanismo si basa su un driver pipe standard e consente di distribuire in modo efficiente 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 permettono di accumulare i messaggi provenienti dal kernel in un buffer circolare. La lettura avviene tramite la 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 determinato tipo. Gli eventi attualmente supportati comprendono solo le operazioni con le chiavi, come l'aggiunta/rimozione di chiavi e la modifica dei loro attributi. Gli eventi indicati sono previsti per l'uso in GNOME.
- È proseguito lo sviluppo della funzionalità ‘pidfd’, che aiuta a gestire le situazioni di riutilizzo del PID (pidfd è associato a un processo specifico e non cambia, mentre il PID può essere associato a un altro processo dopo la conclusione dell'attuale processo associato a questo PID). Nella nuova versione è stata aggiunta la supporto per l'uso di pidfd per collegare processi agli spazi dei nomi (è consentito specificare pidfd durante l'invocazione della chiamata di sistema setns). L'uso di pidfd consente con una sola chiamata di gestire il collegamento del processo a più tipi di spazi dei nomi, riducendo significativamente il numero di chiamate di sistema necessarie e implementando il collegamento in modalità atomica (se si verifica un errore nel collegamento a uno degli spazi dei nomi, gli altri non verranno collegati).
- È stata aggiunta una nuova chiamata di sistema faccessat2(), che si differenzia da
con un argomento aggiuntivo con flag che corrispondono alle raccomandazioni POSIX (in precedenza questi flag erano emulati nella libreria C, mentre il nuovo faccessat2 consente di implementarli nel kernel). - In Cgroup la configurazione memory.swap.high, che può essere utilizzata per rallentare i processi che occupano troppo spazio nella partizione di swap.
- Nell'interfaccia di input/output asincrono è stata aggiunta la supporto per la chiamata di sistema tee().
- È stato aggiunto un meccanismo “, destinato a trasferire nello spazio utente il contenuto delle strutture del kernel.
- la possibilità di utilizzare un buffer circolare per lo scambio di dati tra programmi BPF.
- Meccanismo , progettato per organizzare l'esecuzione parallela dei compiti nel kernel, è stata aggiunta la supporto per i task multithread con bilanciamento del carico.
- Nel meccanismo pstore, che consente di salvare informazioni di debug sulla causa del crash in un'area di memoria, non perse tra i riavvii, backend per salvare informazioni su dispositivi a blocchi.
- Dalla branch del kernel PREEMPT_RT l'implementazione di lock locali.
- nuovo API per l'allocazione di buffer (AF_XDP), mirato a semplificare la scrittura di driver di rete con supporto XDP (eXpress Data Path).
- Per l'architettura RISC-V è stato implementato il supporto per la debug dei componenti del kernel tramite KGDB.
- Fino al rilascio 4.8, sono stati aumentati i requisiti sulla versione di GCC che può essere utilizzata per compilare il kernel. In uno dei prossimi rilasci, si prevede di alzare il livello a GCC 4.9.
- Sottosistema di disco, input/output e file system
- Nel Device Mapper nuovo gestore dm-ebs (emulate block size), che può essere utilizzato per emulare una dimensione di blocco logico più piccola (ad esempio, per emulare settori da 512 byte su dischi con dimensione del settore di 4K).
- Nel filesystem F2FS è stato aggiunto il supporto per la compressione utilizzando l'algoritmo LZO-RLE.
- Nel dm-crypt supporto per chiavi crittografate.
- In Btrfs è migliorato il trattamento delle operazioni di lettura in modalità direct I/O. Durante il montaggio la verifica delle sottodirectory e dei cataloghi rimasti orfani.
- In CIFS è stata aggiunta l'opzione 'nodelete', che consente le normali verifiche dei diritti sul server, ma impedisce al client di eliminare file o directory.
- In Ext4 è migliorato il trattamento dell'errore nell'uso della multithreading. In xattr è stato aggiunto il supporto per lo spazio dei nomi gnu.*, utilizzato in GNU Hurd.
- Per Ext4 e XFS è stato abilitato il supporto per operazioni DAX (accesso diretto al filesystem bypassando la cache di pagina senza utilizzare il livello dei dispositivi a blocchi) legato a singoli file e directory.
- Nella chiamata di sistema è stato aggiunto un flag , specificando il quale le informazioni vengono estratte utilizzando il meccanismo DAX.
- In EXFAT supporto per la verifica dell'area di avvio.
- In FAT il pre-caricamento degli elementi del filesystem. I test su una lenta chiavetta USB da 2TB hanno mostrato una riduzione del tempo di esecuzione del test da 383 a 51 secondi.
- Sottosistema di rete
- Nel codice di gestione del funzionamento dei ponti di rete supporto per il protocollo (Media Redundancy Protocol), che consente di garantire la tolleranza ai guasti collegando diversi switch Ethernet.
- Nel sistema di gestione del traffico (Tc) una nuova azione «gate», che consente di definire gli intervalli di tempo per l'elaborazione e il rifiuto di determinati pacchetti.
- Nel kernel e nell'utilità ethtool è stata aggiunta la supporto per le funzioni di test del cavo di rete connesso e per l'autodiagnosi dei dispositivi di rete.
- Nel stack IPv6 è stata aggiunta la supporto per l'algoritmo MPLS (Multiprotocol Label Switching) per l'instradamento dei pacchetti utilizzando la commutazione multiprotocollo basata su etichette (precedentemente supportata per IPv4 MPLS).
- Aggiunta la supporto per la trasmissione dei pacchetti IKE (Internet Key Exchange) e IPSec su TCP () per aggirare possibili blocchi UDP.
- dispositivo di archiviazione a blocchi di rete rnbd, che consente l'accesso remoto a un dispositivo a blocchi tramite il trasporto RDMA (InfiniBand, RoCE, iWARP) e il protocollo RTRS.
- Nel stack TCP supporto per la compressione degli intervalli nelle risposte di conferma selettiva (selective acknowledgment, SACK).
- Per IPv6 supporto TCP-LD (, Lunghe interruzioni di connettività).
- Apparecchiatura
- Nel driver DRM i915 per le schede grafiche Intel è stata abilitata di default la supporto per i chip Intel Tiger Lake (GEN12), per i quali è anche possibile utilizzare il sistema SAGV (System Agent Geyserville) per la regolazione dinamica della frequenza e della tensione in base alle esigenze di consumo energetico o prestazioni.
- Nel driver amdgpu è stata aggiunta la supporto per il formato pixel FP16 ed è stata implementata la possibilità di lavorare con buffer crittografati nella memoria video (TMZ, Trusted Memory Zone).
- Aggiunta la 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 è garantita la supporto per il recupero delle informazioni sul consumo energetico tramite l'interfaccia (Running Average Power Limit).
- Nel driver Nouveau è stata aggiunta la supporto per il formato dei modificatori NVIDIA. Per gv100 è stata implementata la possibilità di utilizzare modalità interlacciate di scansione. Aggiunta la definizione di vGPU.
- Nel driver MSM (Qualcomm) è stata aggiunta la supporto per GPU Adreno A405, A640 e A650.
- framework interno per la gestione delle risorse DRM (Direct Rendering Manager).
- Aggiunta la supporto per smartphone Xiaomi Redmi Note 7 e Samsung Galaxy S2, così come per i laptop Elm/Hana Chromebook.
- Aggiunti driver per i pannelli LCD: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
- Aggiunta il supporto per piattaforme ARM e 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 il supporto per il processore MIPS Loongson-2K (abbreviato Loongson64). Per la CPU Loongson 3 è stato aggiunto il supporto per la virtualizzazione utilizzando l'ipervisore 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, funzionanti a una frequenza di 1.2 GHz. Il chip contiene cache L2 (1 MB), controller di memoria DDR3-1600 ECC, 1 porta 10Gb Ethernet, 2 porte 1Gb Ethernet, 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 ГОСТ 28147-89. Il chip è stato sviluppato utilizzando un blocco core MIPS32 P5600 Warrior fornito da Imagination Technologies.
Contemporaneamente, il Fondo latinoamericano per il software libero
una versione — , ripulito da elementi di firmware e driver contenenti componenti o porzioni di codice non liberi, di cui l'uso è limitato dal produttore. Nella nuova versione è stata disattivata la 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 Amplifier, Microsemi ZL38060 Connected Home Audio Processor e I2C EEPROM Slave. È stato aggiornato il codice per la pulizia dei blob nei driver e sotto-sistemi Adreno GPU, HabanaLabs Goya, touchscreen x86, vt6656 e btbcm.
Fonte: opennet.ru
