Greg Kroah-Hartman, responsabile del supporto delle ramificazioni stabile e "staging" del kernel Linux e mantenitore principale in 16 sottosistemi del kernel, ha tenuto un intervento alla conferenza Rust Week 2026, in cui ha parlato di come il linguaggio Rust possa aiutare a prevenire la comparsa di vulnerabilità nel kernel, derivanti da errori comuni degli sviluppatori in C riguardanti la gestione della memoria, i blocchi, la gestione degli errori e l'elaborazione di dati non fidati. Tra i principali vantaggi di Rust viene citata la capacità di identificare tali errori in fase di compilazione, anziché durante la revisione del codice da parte delle persone. Tuttavia, Rust non è considerato una panacea in grado di risolvere tutti i problemi, e non si prevede di riscrivere il kernel in Rust: si prevede un'implementazione graduale di Rust attraverso il suo uso per nuovi driver e sottosistemi.
Come esempio di errori nel kernel che si sarebbero potuti evitare utilizzando Rust, si cita un errore nel sottosistema Bluetooth, rimasto non rilevato per 15 anni, e un problema nel hypervisor Xen. Nel primo caso, il programmatore ha eseguito un dereference di un puntatore senza controlli, mentre nel secondo ha dimenticato di rimuovere un blocco nel codice di gestione degli errori.
Secondo Greg, la maggior parte degli errori nel kernel è causata da piccole imperfezioni 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 blocchi nel kernel consentono di accedere ai puntatori interni delle strutture solo dopo aver acquisito il blocco corrispondente, che viene rilasciato automaticamente. Senza acquisire il blocco, non è possibile accedere ai puntatori delle strutture in Rust.
Greg ritiene che possibilità simili offerte da Rust avrebbero evitato il 60% degli errori riscontrati nel kernel, e i controlli eseguiti dal compilatore avrebbero liberato i manutentori dal tempo speso a discutere con gli autori sulla correttezza della gestione degli errori e sulla ragionevolezza dell'imposizione dei blocchi nei punti appropriati. Inoltre, l'introduzione del supporto per Rust ha già avuto un impatto positivo sul codice C nel kernel, grazie al miglioramento del codice C e delle interfacce, oltre all'adozione di alcune tecniche di sviluppo (ad esempio, sono stati implementati blocchi a visibilità ristretta).
Grazie al sistema di tipi che garantisce il rispetto delle regole stabilite e all'uso di sistemi di integrazione continua che verificano il codice durante la fase di compilazione, durante la revisione delle modifiche in Rust i collaboratori possono concentrarsi sulla verifica della logica operativa, anziché 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 è possibile grazie alla chiara distinzione tra dati fidati e non fidati a livello di sistema di tipi: allo sviluppatore basta effettuare un'analisi quando passa da uno stato di fiducia a uno di non fiducia.
Negli ultimi tempi, il team responsabile della sicurezza del kernel pubblica ogni giorno circa 13 rapporti sulle vulnerabilità, il che, rispetto alla dinamica precedente nella scoperta delle vulnerabilità, sembra abbastanza folle (per esempio, ieri sono stati pubblicati 277 rapporti sulle vulnerabilità del kernel). Secondo Greg, l'uso di Rust è uno dei modi reali per ridurre il numero di errori nel kernel causati da tipiche negligenze nella gestione degli errori e delle risorse. All'interno del kernel, il supporto per Rust ha già superato lo stadio sperimentale ed è stato riconosciuto come una funzionalità standard alla fine dello scorso anno.

Fonte: opennet.ru
