Framework para escrever drivers seguros para o kernel Linux em Rust

Josh Triplett, que trabalha na Intel e faz parte do comitê que supervisiona o desenvolvimento do Crates.io, falando no Open Source Technology Summit introduzido um grupo de trabalho que visa trazer a linguagem Rust à paridade com a linguagem C no campo da programação de sistemas.

Em um grupo de trabalho que está em processo de criação, os desenvolvedores do Rust, em conjunto com engenheiros da Intel, prepararão especificações definindo as funcionalidades que precisam ser implementadas no Rust para programação de sistemas. A programação do sistema geralmente requer manipulação de baixo nível, como a execução de instruções privilegiadas do processador e a obtenção de informações detalhadas sobre o estado do processador. Dos recursos semelhantes já desenvolvidos para Rust, destaca-se o suporte para estruturas sem nome, uniões, inserções de linguagem assembly (a macro “asm!”) e o formato de número de ponto flutuante BFLOAT16.

Josh acredita que o futuro da programação de sistemas pertence ao Rust, e a linguagem C nas realidades modernas está reivindicando o lugar que nos últimos anos foi ocupado pelo Assembly. Ferrugem
não apenas alivia os desenvolvedores dos problemas inerentes à linguagem C que surgem devido ao trabalho de baixo nível com memória, mas também oferece a oportunidade de usá-la no desenvolvimento de paradigmas de programação modernos.

Em progresso discussões performances
Josh teve a ideia de adicionar a capacidade de desenvolver drivers no kernel Linux na linguagem Rust, o que possibilitaria criar drivers melhores e mais seguros com o mínimo de esforço, livres de problemas como acesso à memória após a liberação, null desreferências de ponteiro e saturação de buffer.

Greg Kroah-Hartman, responsável por manter o branch estável do kernel Linux, expressou sua disposição em adicionar uma estrutura para o desenvolvimento de drivers na linguagem Rust ao kernel se ele tiver vantagens reais sobre C, por exemplo, fornecerá segurança ligações sobre a API do Kernel. Além disso, Greg considera este framework apenas como uma opção, não ativa por padrão, para não incluir Rust como uma dependência de construção do kernel.

Acontece que várias equipes já estão trabalhando nesse sentido. Por exemplo, desenvolvedores da empresa “Fish in a Barrel” подготовили um kit de ferramentas para escrever módulos carregáveis ​​para o kernel Linux na linguagem Rust, usando um conjunto de camadas abstratas sobre as interfaces e estruturas do kernel para aumentar a segurança. As camadas são geradas automaticamente com base nos arquivos de cabeçalho do kernel existentes usando o utilitário vincular. Clang é usado para construir camadas. Além dos interlayers, os módulos montados usam o pacote staticlib.

Paralelo está desenvolvendo Outro projeto focado no desenvolvimento de drivers para sistemas embarcados e dispositivos IoT, que também utiliza bindgen para gerar camadas baseadas em arquivos de cabeçalho do kernel. A estrutura permite melhorar a segurança do driver sem fazer alterações no kernel - em vez de criar níveis de isolamento adicionais para drivers no kernel, propõe-se bloquear problemas no estágio de compilação, usando a linguagem Rust, mais segura. Supõe-se que tal abordagem pode ser exigida por fabricantes de equipamentos que desenvolvem drivers proprietários às pressas, sem realizar uma auditoria adequada.

Nem todas as funcionalidades pretendidas ainda foram implementadas, mas a estrutura já é bastante adequada para o trabalho e foi usada para escrever um driver funcional para o controlador Ethernet USB LAN9512 fornecido na placa Raspberry Pi 3. O driver smsc95xx existente, escrito por em Linguagem C. Observa-se que o tamanho do módulo e a sobrecarga dos componentes de tempo de execução ao desenvolver um driver em Rust são insignificantes, o que permite que o framework seja utilizado para dispositivos com recursos limitados.

Fonte: opennet.ru

Adicionar um comentário