Релиз модели13 июля 2026 г., 14:16 МСК🤖 Auto

Linux 7.3: Глобальная оптимизация системных вызовов от Thomas Gleixner

Разработчик ядра Thomas Gleixner подготовил серию патчей для Linux 7.3, унифицировавших обработку системных вызовов, исправивших ошибки рандомизации стека на PowerPC и обеспечивших небольшой прирост производительности.

Баннер новости 3451

Унификация и исправление уязвимостей

Ветка Linux 7.3 получит масштабную переработку кода входа в системные вызовы (syscall entry handling). Инициатором изменений стал ветеран разработки ядра Thomas Gleixner, который при анализе патчей обнаружил критические несоответствия в реализации рандомизации kernel stack across различных архитектур. В частности, архитектура PowerPC применяла функцию add_random_kstack_offset() некорректно, что могло снижать эффективность защиты от атак типа ROP/JOP. Другие архитектуры вызывали рандомизацию слишком поздно — после завершения всей работы входа из пользовательского режима, что создавало избыточные накладные расходы.

Технические детали оптимизации

Gleixner переписал код так, чтобы все архитектуры использовали общий (generic) код входа в системные вызовы. Ключевые технические изменения включают:

  • Введение новых вариантов [syscall_]enter_from_user_mode(), которые включают рандомизацию стека на самой ранней возможной стадии.
  • Использование новой функции add_random_kstack_offset_irqsoff(), которая избегает накладных расходов get/put_cpu_var() в регионах с отключенными прерываниями.
  • Адаптация x86-специфичного кода для устранения исторических «странностей» (oddities) и упрощение логики.
  • Интеграция патчей от Jinjie (Huawei) для улучшения работы seccomp и изменение возвращаемых значений функций ptrace на булевы для четкой индикации разрешения системного вызова.

Результаты бенчмарков

Несмотря на то, что функциональных изменений не предполагалось, тестирование тяжелых нагрузок на системные вызовы и микробенчмарки показали небольшой, но измеримый прирост производительности. Это стало возможным за счет устранения избыточных проверок и оптимизации пути выполнения кода. Размер бинарного кода входа в системные вызовы для x86_64 также немного уменьшился.

Аспект До изменений После изменений (Linux 7.3)
Рандомизация стека (PowerPC) Некорректная / suboptimal Исправленная, ранняя инициализация
Накладные расходы (x86/другие) Вызов get/put_cpu_var в interrupt-disabled region Использование irqsoff-вариантов, исключение лишних вызовов
Производительность Базовая Небольшой прирост (small performance gain)
Размер кода (x86_64) Исходный Слегка уменьшен

Статус интеграции

Патчи уже находятся в ветке tip/tip.git (core/entry) и ожидаются в окне слияния (merge window) для выпуска Linux 7.3. Это изменение важно для всех пользователей, так как оно не только улучшает производительность, но и стандартизирует безопасность работы с стеком на уровне ядра для всех поддерживаемых архитектур.

Источник: Phoronix ↗