Фреймворк за писане на защитени драйвери за ядрото на Linux на Rust

Джош Триплет (Josh Triplett), който работи в компанията Intel и е член на комитета, отговарящ за развитието на Crates.io, в своето изказване на конференцията Open Source Technology Summit представи работна група, насочена към достигане на паралелност между езика Rust и езика C в областта на системното програмиране.

В работната група, която е в процес на създаване, разработчиците на Rust заедно с инженери от компанията Intel ще подготвят спецификации за определяне на функционалността, която трябва да бъде реализирана в Rust за системно програмиране. Системното програмиране често изисква нискоуровневи манипулации, като изпълнение на привилегировани инструкции на процесора и получаване на подробна информация за състоянието на процесора. Сред вече разработените за Rust подобни възможности се открояват поддръжка на анонимни структури, обединения (union), асемблерни вмъквания (макрос «asm!») и формат на числата с плаваща запетая BFLOAT16.

Джош смята, че бъдещето на системното програмиране принадлежи на Rust, а езикът C в съвременните реалности претендира за място, което в предишните години бе заемано от Асемблера. Rust
не само освобождава разработчиците от проблемите, присъщи на езика C, произтичащи от нискоуровневата работа с паметта, но също така предлага възможности за прилагане при разработването на съвременни парадигми на програмирането.

По време на обсъждане на презентацията
изказването на Джош беше предложена идеята за добавяне в ядрото на Linux на възможността за разработка на драйвери на езика Rust, което би позволило с минимални усилия да се създават безопасни и качествени драйвери, освободени от проблеми като достъп до памет, след като е освободена, разименуване на нулеви указатели и излизане извън границите на буфера.

Грег Кроа-Хартман (Greg Kroah-Hartman), отговарящ за поддръжката на стабилната версия на ядрото на Linux, изрази готовност да добави в ядрото фреймуърк за разработка на драйвери на езика Rust, ако той предлага реални предимства в сравнение с C, например, предоставяйки безопасни обвивки над API на ядрото. Освен това, Грег разглежда този фреймуърк само като опция, която не е активна по подразбиране, за да не включва Rust в списъка с зависимости за сборка на ядрото.

Оказа се, че няколко екипа вече работят в тази посока. Например, разработчиците от компанията „Fish in a Barrel“ подготвиха инструменти за написване на зареждаеми модули за ядрото на Linux на Rust, използвайки набор от абстрактни слоеве над интерфейсите и структури на ядрото за повишаване на защитата. Слоевете се генерират автоматично на базата на съществуващите заглавни файлове на ядрото с помощта на утилитата bindgen. За изграждане на слоевете се използва Clang. Създаваните модули, освен слоевете, използват пакета staticlib.

Паралелно развива още един проект, насочен към разработването на драйвери за вградени системи и устройства за интернет на нещата, който също така използва bindgen за генериране на прослойки въз основа на заглавни файлове от ядрото. Фреймуъркът позволява постигане на повишена сигурност на драйверите без внасяне на промени в ядрото — вместо да се създават допълнителни нива на изолация в ядрото за драйверите, се предлага да се блокират проблемите на етапа на компилация, прилагайки по-сигурен език Rust. Предполага се, че подобен подход може да бъде търсен от производителите на хардуер, които разработват собственически драйвери набързо, без провеждане на необходимия одит.

Не всичките замислени функционалности все още са реализирани, но фреймуъркът вече е напълно подходящ за работа и е използван за написването на работен драйвер за Ethernet контролера LAN9512 USB, предоставян с платката Raspberry Pi 3. Като стандартна реализация при написването на Rust драйвера е използван съществуващият драйвер smsc95xx, написан на езика C. Забелязва се, че размерът на модула и разходите за runtime компоненти при разработването на драйвер на Rust са незначителни, което позволява приложението на фреймуърка за устройства с ограничени ресурси.

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster