Google ha scoperto centinaia di condizioni di gara nel kernel Linux utilizzando KCSAN

Kernel Linux

Ingegneri di Google che contribuiscono al kernel Linux hanno annunciato di aver scoperto centinaia di "Race Conditions", nel kernel utilizzando KCSAN. L'azienda ha lavorato a lungo su AddressSanitizer per trovare errori relativi al danneggiamento della memoria o su UndefinedBehaviorSanitizer per comportamenti non definiti nel codice.

Questa volta Google offre un nuovo rilevatore di "Race Conditions" per il kernel Linux chiamato KCSAN (Kernel Concurrency Sanitizer). Queste vulnerabilità critiche non sono nuove. In effetti il ​​file Le race condition si verificano quando due o più thread nello stesso processo accedono contemporaneamente alla stessa posizione di memoria, dove almeno uno degli accessi è in scrittura e quando i thread non utilizzano alcun blocco esclusivo per controllare il loro accesso a questa memoria.

Quando queste condizioni sono soddisfatte, l'ordine di accesso non è deterministico e il calcolo può dare risultati diversi da una corsa all'altra a seconda di questo ordine.

Le condizioni di gara sono sempre più viste come errori di accesso simultaneo e sono difficili da duplicare e diagnosticare in programmi paralleli. Il kernel Linux è un sistema software su larga scala, in cui il parallelismo ad alta intensità di thread e l'interleaving non deterministico dei thread sono più soggetti a condizioni competitive.

Alcune situazioni competitive possono essere favorevoli, ma molte di quelle identificate finora sono considerate errori.

Il kernel Linux fornisce diversi meccanismi per evitare e gestire questi tipi di condizioni Poiché esistono strumenti come Thread Analyzer o KTSAN (Kernel Thread Sanitizer) per rilevare errori di esecuzione critici nel kernel Linux.

Tuttavia, Google, che contribuisce anche al kernel Linux, ha recentemente proposto KCSAN, un nuovo rilevatore di condizioni di gara per il kernel, simile a KTSAN.

Secondo Google, KCSAN si concentra sulla scoperta di situazioni competitive nel codice del kernel. Questo rilevatore dinamico di colpi critici è un'alternativa al Kernel Thread Sanitizer (KTSAN).

Secondo la spiegazione di Google, KCSAN si basa su punti di monitoraggio del campionamento, a differenza del rilevatore KTSAN, che è un rilevatore di gara critico prima dell'evento. Le priorità chiave nella progettazione di KCSAN sono la mancanza di falsi positivi, scalabilità e semplicità.

KCSAN utilizza strumenti di compilazione per accedere alla memoria. KCSAN è compatibile con i compilatori GCC e Clang. Con GCC, richiede la versione 7.3.0 o successiva e con Clang, richiede la versione 7.0.0 o successiva.

Nella pagina GitHub del progettoMarco Elver di Google ha scritto che utilizzando KCSAN nei test il mese scorso, hanno trovato in soli due giorni più di 300 situazioni di competizione principali uniche. KCSAN fornisce diverse opzioni di configurazione per personalizzarne il comportamento.

“Utilizziamo KCSAN tramite Syzkaller da diverse settimane e abbiamo riscontrato molti bug. Inizialmente a settembre 2019, abbiamo identificato più di 300 situazioni di competizione uniche in soli due giorni ", ha scritto.

Google ha affermato che l'approccio generale si basa su DataCollider, un altro rilevatore dinamico di situazioni competitive nei moduli del kernel. Ma a differenza di DataCollider, KCSAN non utilizza punti di monitoraggio hardware, ma si basa su strumenti di compilazione.

I punti di monitoraggio vengono implementati utilizzando una codifica efficiente che memorizza il tipo, la dimensione e l'indirizzo di accesso in un file lungo. I vantaggi dell'utilizzo di punti di monitoraggio flessibili sono la portabilità e una maggiore flessibilità nel limitare l'accesso che un punto di monitoraggio può attivare.

Ecco alcuni dei punti chiave che KCSAN ha realizzato per Google:

  • Alte prestazioni: Il runtime di KCSAN è minimo e non richiede il blocco dello stato condiviso per ogni accesso. Il risultato è prestazioni molto migliori rispetto a KTSAN.
  • Nessuna memoria aggiuntiva: secondo Google, non è richiesta alcuna cache. L'attuale implementazione utilizza un numero limitato di lunghezze per codificare le informazioni del punto di monitoraggio, il che è trascurabile
  • Comando di memoria: KCSAN non conosce le regole di controllo del modello di memoria del kernel di Linux (LKMM). Ciò può comportare la perdita di gare critiche (falsi negativi) rispetto a un rilevatore di gara pre-evento come KTSAN
  • precisione: Secondo Google, KCSAN è impreciso perché utilizza una strategia di campionamento;
  • Richiede annotazione: è richiesta un'annotazione minima al di fuori del runtime KCSAN. Nel caso di un listener di eventi precondizione, qualsiasi omissione porta a falsi positivi, che è particolarmente importante nel contesto del kernel che include meccanismi di temporizzazione personalizzati.
  • Rilevamento di scritture dinamiche dai dispositivi: Controllando i valori dei dati durante l'impostazione del punto di controllo, è possibile rilevare anche le scritture dinamiche dai dispositivi.

Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile del trattamento: AB Internet Networks 2008 SL
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.