Framework per scrivere driver sicuri per il kernel Linux in Rust

Josh Triplett, che lavora presso Intel e fa parte del comitato che supervisiona lo sviluppo di Crates.io, parlando all'Open Source Technology Summit presentata un gruppo di lavoro volto a portare il linguaggio Rust alla parità con il linguaggio C nel campo della programmazione di sistemi.

In un gruppo di lavoro in fase di creazione, gli sviluppatori di Rust, insieme agli ingegneri di Intel, prepareranno le specifiche che definiscono le funzionalità che devono essere implementate in Rust per la programmazione dei sistemi. La programmazione del sistema spesso richiede manipolazioni di basso livello, come l'esecuzione di istruzioni privilegiate del processore e l'ottenimento di informazioni dettagliate sullo stato del processore. Tra le funzionalità simili già sviluppate per Rust, si segnala il supporto per strutture senza nome, unioni, inserti in linguaggio assembly (la macro "asm!") e il formato numerico in virgola mobile BFLOAT16.

Josh crede che il futuro della programmazione di sistema appartenga a Rust e che il linguaggio C nelle realtà moderne stia rivendicando il posto che negli anni passati era occupato dall'Assembly. Ruggine
non solo solleva gli sviluppatori dai problemi inerenti al linguaggio C che sorgono a causa del lavoro di basso livello con la memoria, ma offre anche l'opportunità di utilizzarlo nello sviluppo di moderni paradigmi di programmazione.

In corso discussioni spettacoli
Josh ha avuto l'idea di aggiungere la possibilità di sviluppare driver nel kernel Linux nel linguaggio Rust, che consentirebbe di creare driver più sicuri e migliori con il minimo sforzo, esenti da problemi come l'accesso alla memoria dopo la liberazione, null dereferenziazioni dei puntatori e sovraccarichi del buffer.

Greg Kroah-Hartman, responsabile del mantenimento del ramo stabile del kernel Linux, ha espresso la sua disponibilità ad aggiungere al kernel un framework per lo sviluppo di driver nel linguaggio Rust se presenta vantaggi reali rispetto a C, ad esempio, fornirà sicurezza collegamenti sull'API del kernel. Inoltre, Greg considera questo framework solo come un'opzione, non attiva di default, in modo da non includere Rust come dipendenza di build dal kernel.

Si è scoperto che diversi team stanno già lavorando in questa direzione. Ad esempio, gli sviluppatori dell'azienda "Fish in a Barrel" preparato un toolkit per scrivere moduli caricabili per il kernel Linux nel linguaggio Rust, utilizzando una serie di livelli astratti sulle interfacce e sulle strutture del kernel per aumentare la sicurezza. I livelli vengono generati automaticamente in base ai file di intestazione del kernel esistenti utilizzando l'utilità bindgen. Clang è usato per costruire strati. Oltre agli interstrati, i moduli assemblati utilizzano il pacchetto staticlib.

Parallelo si sta sviluppando Un altro progetto si è concentrato sullo sviluppo di driver per sistemi embedded e dispositivi IoT, che utilizzano anche bindgen per generare livelli basati sui file di intestazione del kernel. Il framework consente di migliorare la sicurezza dei driver senza apportare modifiche al kernel: invece di creare ulteriori livelli di isolamento per i driver nel kernel, si propone di bloccare i problemi in fase di compilazione, utilizzando il linguaggio Rust più sicuro. Si presume che un simile approccio possa essere richiesto dai produttori di apparecchiature che sviluppano in fretta driver proprietari senza condurre un audit adeguato.

Non tutte le funzionalità previste sono state ancora implementate, ma il framework è già abbastanza adatto al lavoro ed è stato utilizzato per scrivere un driver funzionante per il controller Ethernet USB LAN9512 fornito nella scheda Raspberry Pi 3. Il driver smsc95xx esistente, scritto da in Linguaggio C. Va notato che la dimensione del modulo e il sovraccarico dei componenti runtime durante lo sviluppo di un driver in Rust sono insignificanti, il che consente di utilizzare il framework per dispositivi con risorse limitate.

Fonte: opennet.ru

Aggiungi un commento