Грег Кроа-Хартман разказа как Rust може да помогне в борбата с грешките в ядрото на Linux

Грег Кроа-Хартман (Greg Kroah-Hartman), отговорен за поддръжката на стабилните и "staging" клони на ядрото на Linux и главен поддръжник в 16 подсистеми на ядрото, изнесе доклад на конференцията Rust Week 2026, в който обясни как езикът Rust може да помогне за предотвратяване на уязвимости в ядрото, произтичащи от типични грешки на разработчиците на C при работа с памет, блокировки, обработка на грешки и работа с неиздоверени данни. Основното предимство на Rust е способността да се откриват подобни грешки на етапа на компилация, а не при рецензиране на код от хора. Въпреки това, Rust не се разглежда като панацея, способна да реши всички проблеми, и никой не планира да препише ядрото на Rust: очаква се постепенно внедряване на Rust чрез използването му за нови драйвери и подсистеми.

Като пример за грешки в ядрото, които биха могли да бъдат избегнати с помощта на Rust, се споменава грешка в подсистемата Bluetooth, оставаща незабелязана в продължение на 15 години, и проблем в хипервизора Xen. В първия случай разработчикът е извършил разыменоване на указател без проверка, а във втория е забравил да премахне блокировката в кода за обработка на грешки.
Според Грег, повечето грешки в ядрото са причинени от подобни малки детайли, които с времето се натрупват и се появяват като уязвимости. В Rust много от тези проблеми се предотвратяват от компилатора, например, Rust абстракции за блокировки в ядрото позволяват достъп до вътрешни указатели на структури само след задържане на съответната блокировка, която се премахва автоматично. Без задържане на блокировка достъпът до указатели на структури в Rust не е възможен.

Грег смята, че подобни възможности на Rust не биха допуснали появата на 60% от грешките, открити в ядрото, а извършените от компилатора проверки биха освободили поддържащите от разхода на време в дискусии с авторите относно коректността на обработката на грешките и оправдаността на блокировките на съответното място. Освен това, внедряването на поддръжка на Rust вече оказа благоприятно влияние и върху C кода в ядрото, благодарение на подреждането на C кода и интерфейсите, както и заимстването на някои техники за разработка (например, реализирани са блокировки с ограничена видимост).

Благодарение на системата от типове, която гарантира спазването на зададените правила, и прилагането на системи за непрекъсната интеграция, проверяващи кода на етапа на компилация, при рецензии на промените на Rust, поддържащите могат да се съсредоточат върху проверката на логиката на работата, а не да следят манипулациите с ресурсите. Прилагането на Rust също така позволява по-внимателно отношение към данните, идващи от оборудването или от външни системи. Такова се постига благодарение на явното разграничаване на надеждни и ненадеждни данни на ниво система от типове: на разработчика му е достатъчно да извърши анализ при преминаването от ненадеждно в надеждно състояние.

В последно време екипът, отговорен за сигурността в ядрото, публикува всеки ден около 13 отчета за уязвимости, което на фона на предишната динамика на откритие на уязвимости изглежда като някакво безумие (за пример, за вчерашния ден бяха публикувани 277 отчета за уязвимости в ядрото). Според Грег, използването на Rust е един от реалните начини за постигане на намаляване на броя на грешките в ядрото, причинени от традиционни слабости при обработката на грешки и управлението на ресурсите. В ядрото поддръжката на Rust вече излезе извън рамките на експеримента и в края на миналата година беше призната като стандартна възможност на ядрото.

Възпроизведи видео


Източник: opennet.ru
Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster