Устранение исторического багажа безопасности
Linus Torvalds включил в основную ветку Linux 7.4 патч, полностью удаляющий функции __get_user() и __put_user() из generic-кода ядра. Эти функции, являясь ускоренными, но менее защищенными аналогами get_user() и set_user(), использовались для копирования данных между пользовательским и пространством ядра. Главная проблема старых версий заключалась в отсутствии проверки диапазонов пользовательских адресов, что делало их уязвимыми.
Почему это важно: скорость против безопасности
В коммите к слиянию Torvalds отметил, что использование этих функций не только небезопасно, но и парадоксальным образом медленнее современных аналогов из-за отсутствия оптимизаций. Большинство мест использования уже были конвертированы, но остатки оставались в коде. Удаление завершает процесс очистки для архитектуры x86/x86_64, хотя некоторые артефакты сохранились в портах других архитектур (например, ARM64, где функции уже маппятся на безопасные аналоги).
Роль AI в разработке ядра
Интересно, что Linus Torvalds признался в рассылке разработчиков, что для очистки кода использовал AI-ассистента Claude Code. Он описал его как «продвинутый скрипт Coccinelle» для статического анализа и трансформации исходного кода. Это продолжение тренда: ранее Torvalds уже использовал AI для поиска багов и оптимизации производительности, демонстрируя практическое применение нейросетей в низкоуровневой разработке.
Сравнение подходов к работе с памятью
| Характеристика | __get_user() / __put_user() | get_user() / put_user() |
|---|---|---|
| Безопасность | Низкая (нет проверки адресов) | Высокая (полная валидация) |
| Производительность | Теоретически выше, но на практике медленнее из-за ошибок | Оптимизировано современными ядрами |
| Статус в Linux 7.4 | Удалено из generic-кода | Стандарт де-факто |
Новые инструменты: Scoped User Access Regions
Удаление старых функций стало возможным благодаря внедрению в прошлом году новых хелперов — scoped user access region helpers (commit e497310b4ffb). Эти инструменты делают использование современных интерфейсов интуитивно понятным и устраняют любые оправдания для использования устаревших, «ужасных» методов работы с памятью.
Источник: Phoronix ↗
