Торвальдс удалил небезопасные __get_user() и __put_user() из ядра Linux 7.4

· Linux и open source
Линус Торвальдс продолжает лично писать патчи для ядра — и на этот раз с помощью ИИ Claude Code избавился от исторических небезопасных функций __get_user() и __put_user().

cover.svg

Линус Торвальдс влил в ядро Linux 7.4 свою ветку, удаляющую исторические функции __get_user() и __put_user(). Это продолжение недавнего всплеска его собственной работы над кодом ядра, часть которой выполнена с привлечением ИИ.

Удалённые функции — более быстрые, но менее безопасные версии get_user() и put_user(). Первая пара используется для копирования одной простой переменной из пространства пользователя в пространство ядра, вторая — для записи одной переменной из ядра в пользовательское пространство. Ключевое отличие «подчёркнутых» вариантов в том, что они не проверяют диапазон пользовательских адресов, то есть лишены проверки указателей — отсюда и их небезопасность.

«Давно пора»

Сам Торвальдс в описании слияния не скупится на оценки. По его словам, __get_user() и __put_user() «целиком принадлежат истории» и «никогда не являются правильным выбором». При неправильном же использовании — а это, по его замечанию, «каждый случай» — они не только медленнее корректного варианта, но и небезопасны, поскольку не проверяют диапазон пользовательских адресов.

Большинство мест вызова были переведены на современные интерфейсы уже давно, однако остатки сохранялись. Изначально задумка была скромнее: один патч, показывающий, «как переводить __{get,put}_user() на современный код». Торвальдс отдельно отметил удобство появившихся в прошлом году помощников — областей ограниченного пользовательского доступа (scoped user access regions) за авторством Томаса, которые делают современные интерфейсы особенно простыми и не оставляют оправданий для старых «ужасов».

Функции удалены из всего общего кода ядра; для архитектуры x86/x86_64 интерфейс устранён полностью. В портах под другие процессорные архитектуры остатки сохраняются — из-за нетривиальных случаев или, как в ARM64, потому что тамошние функции уже отображаются на get_user() и put_user().

ИИ как продвинутый Coccinelle

В работе была и доля ИИ. Отвечая тем, кого занимает вопрос об использовании Торвальдсом ИИ-инструментов, Phoronix напоминает о его недавних экспериментах — разборе багов и приросте производительности с помощью Claude Code. В случае с удалением __get_user() и __put_user() Торвальдс в рассылке заметил, что применял Claude как «продвинутый вариант скрипта Coccinelle» — инструмента статического анализа и преобразований «исходник в исходник».


Источник: Phoronix

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.