Greg Kroah-Hartman, responsabile del supporto per i rami stabili e 'staging' del kernel Linux e mantenitore principale di 16 sottosistemi del kernel, ha presentato un intervento alla conferenza Rust Week 2026, in cui ha spiegato come il linguaggio Rust possa aiutare a prevenire la comparsa di vulnerabilità nel kernel, derivanti da errori comuni dei programmatori in C durante la gestione della memoria, i lock, la gestione degli errori e l'elaborazione di dati non attendibili. Il principale vantaggio di Rust è la capacità di identificare tali errori in fase di compilazione, invece che nella revisione del codice da parte di sviluppatori. Tuttavia, Rust non è visto come una panacea in grado di risolvere tutti i problemi, e nessuno intende riscrivere il kernel in Rust: si prevede un'implementazione graduale di Rust tramite il suo utilizzo per nuovi driver e sottosistemi.
Come esempio di errori nel kernel che potrebbero essere stati evitati usando Rust, è stata citata un’errore nel sottosistema Bluetooth, che era rimasto inosservato per 15 anni, e un problema nel hypervisor Xen. Nel primo caso, il programmatore ha effettuato l'indirizzamento di un puntatore senza verifica, mentre nel secondo ha dimenticato di rilasciare un lock nel codice di gestione degli errori.
Secondo Greg, la maggior parte degli errori nel kernel è causata da piccole disattenzioni che si accumulano nel tempo e si manifestano come vulnerabilità. In Rust molti di questi problemi vengono prevenuti dal compilatore; ad esempio, le astrazioni Rust per i lock nel kernel consentono l'accesso ai puntatori interni delle strutture solo dopo aver acquisito il lock corrispondente, che viene rilasciato automaticamente. Senza acquisire il lock, non è possibile accedere ai puntatori delle strutture in Rust.
Greg ritiene che tali funzionalità di Rust avrebbero evitato il 60% degli errori riscontrati nel kernel, e i controlli eseguiti dal compilatore avrebbero risparmiato tempo agli sviluppatori nelle discussioni con gli autori riguardo la correttezza della gestione degli errori e la giustificazione dell'impostazione dei lock nei punti giusti. Inoltre, l'integrazione del supporto per Rust ha già avuto effetti positivi anche sul codice C nel kernel, contribuendo a migliorare la qualità del codice e delle interfacce, oltre a ispirare l'adozione di alcune tecniche di sviluppo (ad esempio, sono stati implementati lock con ambito limitato).
Grazie al sistema di tipi che garantisce il rispetto delle regole stabilite e all'uso di sistemi di integrazione continua che controllano il codice durante la fase di build, durante la revisione delle modifiche su Rust, i revisori possono concentrarsi sulla verifica della logica operativa, piuttosto che sul monitoraggio delle manipolazioni delle risorse. L'uso di Rust consente anche di prestare maggiore attenzione ai dati provenienti dall'hardware o da sistemi esterni. Questo si ottiene grazie a una chiara distinzione tra dati affidabili e non affidabili a livello di sistema di tipi: è sufficiente che lo sviluppatore esegua un'analisi durante la transizione da uno stato non affidabile a uno affidabile.
Negli ultimi tempi, il team responsabile della sicurezza nel kernel pubblica ogni giorno circa 13 report su vulnerabilità, il che, rispetto alla dinamica passata nella rilevazione di vulnerabilità, suona quasi come una follia (per esempio, ieri sono stati pubblicati 277 report su vulnerabilità nel kernel). Secondo Greg, l'uso di Rust è uno dei modi concreti per ridurre il numero di errori nel kernel causati da errori tradizionali nella gestione degli errori e delle risorse. Nel kernel, il supporto per Rust ha già superato il limite dell'esperimento ed è stato riconosciuto come una funzionalità standard del kernel alla fine dello scorso anno.

Fonte: opennet.ru
