Конфликт безопасности и покрытия сборки
В релизе Linux 7.3, ожидаемом в конце сентября 2026 года, произошло существенное изменение в конфигурации ядра. Функция RandStruct — механизм защиты, случайным образом изменяющий макет памяти структур ядра на этапе сборки — теперь отключается по умолчанию, если в системе доступен рабочий инструмент Rust и архитектура процессора поддерживает Rust.
Инициатором изменений стал Марк Браун (Mark Brown). В своем патче он объяснил, что текущая реализация RandStruct не поддерживает язык Rust. Это создает жесткую зависимость в Kconfig: включение RandStruct автоматически отключает Rust. Поскольку стандартная сборка покрытия allmodconfig требует включения всех модулей, наличие Rust приводило к тому, что сборка либо падала, либо отключала защиту, что противоречило целям тестирования.
Технические детали и обходные пути
Разработчики решили проблему путем отключения RandStruct по умолчанию при наличии Rust. Это позволяет избежать циклических зависимостей в конфигурации. Однако это создает ситуацию, при которой ядро может быть собрано без обеих функций (и без Rust, и без RandStruct), если конфигурация не настроена явно.
Для пользователей, которым критически важна защита RandStruct, остается возможность собрать ядро с нестандартной конфигурацией, явно отключив поддержку Rust. Это временное решение, так как в будущем ожидается полная интеграция RandStruct с кодом на Rust.
Сравнение конфигураций
В таблице ниже приведено сравнение поведения ядра до и после изменений в Linux 7.3:
| Параметр | Linux до 7.3 | Linux 7.3+ |
|---|---|---|
| RandStruct (по умолчанию) | Включен | Отключен (если есть Rust) |
| Rust (по умолчанию) | Отключен (при включенном RandStruct) | Включен (при доступном тулчейне) |
| Сборка allmodconfig | Возможна, но без Rust | Возможна с полным покрытием модулей |
| Безопасность памяти | Выше (за счет рандомизации) | Зависит от выбора пользователя |
Почему это важно
Это изменение подчеркивает растущую роль Rust в экосистеме Linux. Несмотря на то, что RandStruct является важным инструментом защиты от уязвимостей, способность собирать ядро с полным покрытием модулей (allmodconfig) критически важна для обнаружения регрессий и обеспечения стабильности. Отказ от RandStruct в пользу более широкого тестирования и поддержки Rust — это шаг к будущему, где безопасность будет обеспечиваться не только рандомизацией, но и типобезопасностью самого языка.
Источник: Phoronix ↗
