Rilascio del kernel Linux 5.2

Dopo due mesi di sviluppo Linus Torvalds presentata rilascio del kernel Linux 5.2. Tra i cambiamenti più evidenti: la modalità operativa Ext4 non fa distinzione tra maiuscole e minuscole, chiamate di sistema separate per il montaggio del file system, driver per GPU Mali 4xx/ 6xx/7xx, la capacità di gestire modifiche nei valori sysctl nei programmi BPF, device-mapper modulo dm-dust, protezione contro gli attacchi MDS, supporto per Sound Open Firmware per DSP, ottimizzazione delle prestazioni BFQ, portando il sottosistema PSI (Pressure Stall Information) alla possibilità di utilizzo in Android.

La nuova versione ha accettato 15100 correzioni dagli sviluppatori del 1882,
dimensione della patch: 62 MB (le modifiche hanno interessato 30889 file, sono state aggiunte 625094 righe di codice, 531864 righe sono state eliminate). Circa il 45% di tutti quelli presentati in 5.2
le modifiche sono associate ai driver di dispositivo, circa il 21% delle modifiche lo hanno fatto
attitudine all'aggiornamento del codice specifico delle architetture hardware, 12%
relativo allo stack di rete, il 3% ai file system e il 3% all'interno
sottosistemi del kernel. Il 12.4% di tutte le modifiche sono state preparate da Intel, il 6.3% da Red Hat, il 5.4% da Google, il 4.0% da AMD, il 3.1% da SUSE, il 3% da IBM, il 2.7% da Huawei, il 2.7% da Linaro, il 2.2% da ARM , 1.6% - Oracolo.

Il principale innovazioni:

  • Sottosistema disco, I/O e file system
    • Aggiunto per Ext4 sostegno funziona senza distinguere tra maiuscole e minuscole nei nomi dei file, che viene attivato solo in relazione alle singole directory vuote utilizzando il nuovo attributo “+F” (EXT4_CASEFOLD_FL). Quando questo attributo è impostato su una directory, tutte le operazioni con file e sottodirectory al suo interno verranno eseguite senza tenere conto del caso dei caratteri, compreso il caso verrà ignorato durante la ricerca e l'apertura dei file (ad esempio, i file Test.txt, test.txt e test.TXT in tali directory saranno considerati uguali). Per impostazione predefinita, il file system continua a distinguere tra maiuscole e minuscole, ad eccezione delle directory con l'attributo "chattr +F";
    • Sono state unificate le funzioni per l'elaborazione dei caratteri UTF-8 nei nomi dei file, utilizzati durante l'esecuzione di operazioni di confronto e normalizzazione delle stringhe;
    • XFS aggiunge l'infrastruttura per il monitoraggio dell'integrità del file system e un nuovo ioctl per interrogare lo stato di integrità. È stata implementata una funzionalità sperimentale per controllare online i contatori dei superblocchi.
    • Aggiunto nuovo modulo device-mapper "dm-polvere“, che consente di simulare la comparsa di blocchi danneggiati sul supporto o errori durante la lettura dal disco. Il modulo consente di semplificare il debug e il test delle applicazioni e dei vari sistemi di storage a fronte di possibili guasti;
    • Eseguito Ottimizzazioni significative delle prestazioni per lo scheduler I/O BFQ. In condizioni di carico I/O elevato, ottimizzazioni apportate consentire Riduci fino all'80% i tempi di operazioni come l'avvio di applicazioni.
    • Aggiunta una serie di chiamate di sistema per il montaggio dei file system: fsopen(), open_tree(), fspick(), fsmount(), fsconfig() и move_mount(). Queste chiamate di sistema consentono di elaborare separatamente le diverse fasi del montaggio (elaborare il superblocco, ottenere informazioni sul file system, montare, collegare al punto di montaggio), che in precedenza venivano eseguite utilizzando la chiamata di sistema comune mount(). Le chiamate separate offrono la possibilità di eseguire scenari di montaggio più complessi ed eseguire operazioni separate come la riconfigurazione del superblocco, l'abilitazione delle opzioni, la modifica del punto di montaggio e lo spostamento in uno spazio dei nomi diverso. Inoltre, l'elaborazione separata consente di determinare con precisione i motivi dell'output dei codici di errore e impostare più origini per file system multistrato, come overlayf;
    • All'interfaccia per l'I/O asincrono io_uring è stata aggiunta una nuova operazione IORING_OP_SYNC_FILE_RANGE, che esegue azioni equivalenti a una chiamata di sistema intervallo_file_sincronizzazione(), e abbiamo anche implementato la possibilità di registrare eventfd con io_uring e ricevere notifiche sul completamento delle operazioni;
    • Per il file system CIFS è stato aggiunto FIEMAP ioctl, fornendo un'efficiente mappatura delle estensioni, nonché il supporto per le modalità SEEK_DATA e SEEK_HOLE;
    • Nel sottosistema FUSE proposto API per la gestione del caching dei dati;
    • Btrfs ha ottimizzato l'implementazione di qgroups e migliorato la velocità di esecuzione di fsync per i file con più collegamenti reali. È stato migliorato il codice di controllo dell'integrità dei dati, che ora tiene conto del possibile danneggiamento delle informazioni nella RAM prima di trasferire i dati sul disco;
    • CEPH ha aggiunto il supporto per l'esportazione di istantanee tramite NFS;
    • È stata migliorata l'implementazione del montaggio di NFSv4 in modalità “soft” (se si verifica un errore durante l'accesso al server in modalità “soft”, una chiamata a restituisce immediatamente un codice di errore, e in modalità “hard” il controllo non viene dato fino a quando FS la disponibilità o il timeout vengono ripristinati). La nuova versione fornisce una gestione del timeout più accurata, un ripristino in caso di arresto anomalo più rapido e una nuova opzione di montaggio “softerr” che consente di modificare il codice di errore (ETIMEDOUT) restituito quando si verifica un timeout;
    • L'API nfsdcld, progettata per tenere traccia dello stato dei client NFS, consente al server NFS di monitorare correttamente lo stato del client al riavvio. Pertanto, il demone nfsdcld può ora agire come gestore nfsdcltrack;
    • Per AFS aggiunto emulazione dei blocchi di intervalli di byte nei file (Blocco dell'intervallo di byte);
  • Virtualizzazione e sicurezza
    • È stato fatto del lavoro per eliminare i punti nel kernel che consentono l'esecuzione del codice da aree di memoria riflessa scrivibili, che consentono di bloccare potenziali buchi che potrebbero essere sfruttati durante un attacco;
    • È stato aggiunto un nuovo parametro della riga di comando del kernel "mitigations=", che fornisce un modo semplificato per controllare l'abilitazione di determinate tecniche per la protezione dalle vulnerabilità associate all'esecuzione speculativa di istruzioni sulla CPU. Il passaggio di "mitigations=off" disabilita tutti i metodi esistenti e la modalità predefinita "mitigations=auto" abilita la protezione ma non influisce sull'uso di Hyper Threading. La modalità “mitigations=auto,nosmt” disabilita inoltre l'Hyper Threading se richiesto dal metodo di protezione.
    • Aggiunto da supporto per la firma digitale elettronica secondo GOST R 34.10-2012 (RFC 7091, ISO/IEC 14888-3), sviluppato da Vitaly Chikunov di Basalt SPO. Aggiunto il supporto per AES128-CCM all'implementazione TLS nativa. Aggiunto supporto per algoritmi AEAD al modulo crypto_simd;
    • In Kconfig aggiunto una sezione separata di “rafforzamento del kernel” con opzioni per migliorare la protezione del kernel. Attualmente, la nuova sezione contiene solo le impostazioni per abilitare i plugin di miglioramento del controllo GCC;
    • Il codice del kernel è quasi consegnato da istruzioni case unificatore in switch (senza return o break dopo ogni blocco case). Resta da risolvere 32 casi su 2311 di tale utilizzo dello switch, dopodiché sarà possibile utilizzare la modalità “-Wimplicit-fallthrough” durante la compilazione del kernel;
    • Per l'architettura PowerPC è stato implementato il supporto ai meccanismi hardware per limitare i percorsi di accesso indesiderati del kernel ai dati nello spazio utente;
    • Aggiunto codice di blocco attacchi Classe MDS (Microarchitectural Data Sampling) nei processori Intel. Puoi verificare se un sistema è vulnerabile a vulnerabilità attraverso la variabile SysFS “/sys/devices/system/cpu/vulnerabilities/mds”. Доступно due modalità di protezione: completa, che richiede il microcodice aggiornato, e bypass, che non garantisce completamente la pulizia dei buffer della CPU quando il controllo viene trasferito allo spazio utente o al sistema ospite. Per controllare le modalità di protezione è stato aggiunto nel kernel il parametro “mds=", che può assumere i valori "full", "full,nosmt" (+ disabilita Hyper-Threads) e "off";
    • Sui sistemi x86-64 è stata aggiunta la protezione “stack guard-page” per IRQ, meccanismi di debug e gestori di eccezioni, la cui essenza è la sostituzione delle pagine di memoria al confine con lo stack, l'accesso che porta alla generazione di un eccezione (page-fault);
    • Aggiunta l'impostazione sysctl vm.unprivileged_userfaultfd, che controlla la capacità dei processi non privilegiati di utilizzare la chiamata di sistema userfaultfd();
  • Sottosistema di rete
    • Aggiunto da Supporto gateway IPv6 per percorsi IPv4. Ad esempio, ora puoi specificare regole di routing come "i ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0";
    • Per ICMPv6, le chiamate ioctl icmp_echo_ignore_anycast e icmp_echo_ignore_multicast sono implementate per ignorare ICMP ECHO per anycast e
      indirizzi multicast. Aggiunto da la capacità di limitare l'intensità dell'elaborazione dei pacchetti ICMPv6;

    • Per il protocollo mesh BATMAN (Better Approach To Mobile Adhoc Networking), che consente la creazione di reti decentralizzate in cui ogni nodo è connesso tramite nodi vicini, aggiunto supporto per la trasmissione da multicast a unicast, nonché la possibilità di controllo tramite sysfs;
    • In ethtool aggiunto un nuovo parametro Fast Link Down, che consente di ridurre il tempo necessario per ricevere informazioni su un evento di link down per 1000BaseT (in condizioni normali il ritardo arriva fino a 750ms);
    • apparso opportunità vincolare i tunnel Foo-Over-UDP a uno specifico indirizzo, interfaccia di rete o socket (in precedenza il vincolo veniva effettuato solo tramite una maschera comune);
    • Nello stack wireless purché possibilità di implementare handler
      OWE (Opportunistic Wireless Encryption) nello spazio utente;

    • In Netfilter, il supporto per la famiglia di indirizzi inet è stato aggiunto alle catene nat (ad esempio, ora puoi utilizzare una regola di traduzione per elaborare ipv4 e ipv6, senza separare le regole per ipv4 e ipv6);
    • In rete aggiunto il regime rigoroso per una verifica rigorosa della correttezza di tutti i messaggi e attributi, in cui non è consentito superare la dimensione prevista degli attributi ed è vietata l'aggiunta di dati aggiuntivi alla fine dei messaggi;
  • Servizi di memoria e di sistema
    • Il flag CLONE_PIDFD è stato aggiunto alla chiamata di sistema clone(), quando specificato, il descrittore di file “pidfd” identificato con il processo figlio creato viene restituito al processo genitore. Questo descrittore di file, ad esempio, può essere utilizzato per inviare segnali senza timore di incorrere in una race condition (subito dopo l'invio del segnale, il PID target potrebbe essere liberato a causa della terminazione del processo e occupato da un altro processo);
    • Per la seconda versione di cgroups è stata aggiunta la funzionalità freezer controller, con la quale è possibile interrompere il lavoro in un cgroup e liberare temporaneamente alcune risorse (CPU, I/O e potenzialmente anche memoria) per eseguire altre attività. La gestione viene effettuata tramite i file di controllo cgroup.freeze e cgroup.events nell'albero cgroup. La voce 1 in cgroup.freeze congela i processi nel cgroup corrente e in tutti i gruppi figli. Dato che il congelamento richiede un po' di tempo, viene fornito un ulteriore file cgroup.events attraverso il quale è possibile informarsi sul completamento dell'operazione;
    • Protetto esportazione degli attributi di memoria collegati a ciascun nodo in sysfs, che consente di determinare dallo spazio utente la natura dell'elaborazione dei banchi di memoria in sistemi con memoria eterogenea;
    • È stato migliorato il sottosistema PSI (Pressure Stall Information) che permette di analizzare informazioni sui tempi di attesa per la ricezione di varie risorse (CPU, memoria, I/O) per determinati task o insiemi di processi in un cgroup. Utilizzando PSI, i gestori dello spazio utente possono stimare in modo più accurato il livello di carico del sistema e i modelli di rallentamento rispetto al carico medio. La nuova versione fornisce il supporto per l'impostazione delle soglie di sensibilità e la possibilità di utilizzare la chiamata poll() per ricevere la notifica che le soglie impostate sono state attivate per un certo periodo di tempo. Questa funzionalità consente ad Android di monitorare tempestivamente la carenza di memoria, identificare l'origine dei problemi e terminare le applicazioni non importanti senza causare problemi visibili all'utente. Durante gli stress test, gli strumenti di monitoraggio del consumo di memoria basati su PSI hanno dimostrato un numero di falsi positivi 10 volte inferiore rispetto alle statistiche vmpression;
    • Il codice per il controllo dei programmi BPF è stato ottimizzato, il che consente un controllo fino a 20 volte più veloce per programmi di grandi dimensioni. L'ottimizzazione ha permesso di aumentare il limite della dimensione dei programmi BPF da 4096 a un milione di istruzioni;
    • Per i programmi BPF fornito da la possibilità di accedere ai dati globali, che consente di definire variabili e costanti globali nei programmi;
    • Aggiunto API, che ti consente di controllare le modifiche ai parametri sysctl dai programmi BPF;
    • Per l'architettura MIPS32 è stato implementato un compilatore JIT per la macchina virtuale eBPF;
    • Per l'architettura PowerPC 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;
    • Sui sistemi x86-64, la restrizione sul posizionamento dei dump dello stato durante un crash del kernel (crash-dump) nelle aree di memoria superiori a 896 MB è stata rimossa;
    • Per l'architettura s390, sono implementati il ​​supporto per la randomizzazione dello spazio degli indirizzi del kernel (KASLR) e la possibilità di verificare le firme digitali durante il caricamento del kernel tramite kexec_file_load();
    • Per l'architettura PA-RISC, aggiunto il supporto per il debugger del kernel (KGDB), jump mark e kprobes;
  • Attrezzatura
    • Autista incluso Lime per la GPU Mali 400/450, utilizzata in molti chip più vecchi basati sull'architettura ARM. Per le GPU Mali più recenti, è stato aggiunto il driver Panfrost, che supporta chip basati sulle microarchitetture Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) e Bifrost (Mali G3x, G5x, G7x);
    • Aggiunto supporto per dispositivi audio che utilizzano firmware aperto Suono Open Firmware (SOF). Nonostante la disponibilità di driver aperti, il codice firmware per i chip audio rimaneva ancora chiuso e veniva fornito in forma binaria. Il progetto Sound Open Firmware è stato sviluppato da Intel per creare firmware aperto per chip DSP relativi all'elaborazione audio (in seguito anche Google si è unito allo sviluppo). Attualmente, il progetto ha già preparato la scoperta del firmware per i chip audio delle piattaforme Intel Baytrail, CherryTrail, Broadwell, ApolloLake, GeminiLake, CannonLake e IceLake;
    • Il driver Intel DRM (i915) aggiunge il supporto per i chip
      Elkhartlake (Gen11). Aggiunti ID PCI per i chip Comet Lake (Gen9). È stato stabilizzato il supporto per i chip Icelake, per i quali sono stati aggiunti anche ulteriori identificatori di dispositivo PCI.
      Incluso
      modalità di commutazione asincrona tra due buffer nella memoria video (ribaltamento asincrono) durante l'esecuzione di operazioni di scrittura tramite mmio, che ha aumentato significativamente le prestazioni di alcune applicazioni 3D (ad esempio, le prestazioni nel test 3DMark Ice Storm sono aumentate del 300-400%). Aggiunto supporto tecnologico HDCP2.2 (High-bandwidth Digital Content Protection) per crittografare i segnali video trasmessi tramite HDMI;

    • Il driver amdgpu per la GPU Vega20 aggiunto supporto per RAS (Reliability, Availability, Serviceability) e supporto sperimentale per il sottosistema SMU 11, che ha sostituito la tecnologia Powerplay. Per GPU Vega12 aggiunto supporto per la modalità BACO (Bus Active, Chip Off). Aggiunto il supporto iniziale per XGMI, un bus ad alta velocità (PCIe 4.0) per l'interconnessione GPU. Aggiunti identificatori mancanti per le schede basate sulla GPU Polaris10 al driver amdkfd;
    • Il driver Nouveau ha aggiunto il supporto per le schede basate sul chipset NVIDIA Turing 117 (TU117, utilizzato nella GeForce GTX 1650). IN
      kconfig aggiunto impostazione per disabilitare le funzioni obsolete che non vengono più utilizzate nelle versioni attuali di libdrm;

    • All'API DRM e al driver amdgpu è stato aggiunto il supporto per gli oggetti di sincronizzazione della "timeline", consentendoti di fare a meno del classico blocco.
    • Il driver vboxvideo per la GPU virtuale VirtualBox è stato spostato dal ramo di staging alla struttura principale;
    • Aggiunto un driver di velocità per il chip ASPEED SoC GFX;
    • Aggiunto supporto per SoC ARM e Intel Agilex (SoCFPGA), NXP i.MX8MM, Allwinner (RerVision H3-DVK (H3), Oceanic 5205 5inMFD, ,Beelink GS2 (H6), Orange Pi 3 (H6)), Rockchip (Orange Pi ) schede RK3399, Nanopi NEO4, Veyron-Mighty Chromebook), Amlogic: SEI Robotics SEI510,
      ST Micro (stm32mp157a, stm32mp157c), NXP (
      Eckelmann ci4x10 (i.MX6DL),

      i.MX8MM EVK (i.MX8MM),

      ZII i.MX7 RPU2 (i.MX7),

      ZII SPB4 (VF610),

      Zii Ultra (i.MX8M),

      TQ TQMa7S (i.MX7Solo),

      TQ TQMa7D (i.MX7Dual),

      Kobo Aura (i.MX50),

      Menlosystems M53 (i.MX53)), NVIDIA Jetson Nano (Tegra T210).

Allo stesso tempo, la Free Software Foundation America Latina formato
вариант kernel 5.2 completamente gratuito - linux-libre 5.2-gnu, ripulito da elementi firmware e driver contenenti componenti non liberi o sezioni di codice, la cui portata è limitata dal produttore. La nuova versione include il caricamento dei file
Firmware aperto audio. Il caricamento dei BLOB nei driver è disabilitato
mt7615, rtw88, rtw8822b, rtw8822c, btmtksdio, iqs5xx, ishtp e ucsi_ccg. Il codice di pulizia blob nei driver e sottosistemi ixp4xx, imx-sdma, amdgpu, nouveau e goya, nonché nella documentazione del microcodice, è stato aggiornato. Arrestata la pulizia dei BLOB nel driver r8822be a causa della sua rimozione.

Fonte: opennet.ru

Aggiungi un commento