Один вопрос к старому коду вскрыл то, что годами оставалось незаметным.
<div class="articl-text-cover" style="position:relative;width:100%;max-width:800px;margin-left:auto;margin-right:auto;aspect-ratio:1200/675;margin-bottom:2rem;overflow:hidden">
Даже небольшая правка в старом коде ядра порой раскрывает целую цепочку накопившихся проблем, и именно такой разбор привёл к переработке механизма обработки системных вызовов, которую планируют включить в Linux 7.3.
Разработчик ядра Томас Гляйкснер изучал предложенное изменение в обработке номеров системных вызовов, но обнаружил различия в коде для разных процессорных архитектур. Системные вызовы позволяют программам обращаться к функциям ядра, поэтому код обрабатывает их при каждом переходе из пользовательского режима.
Главная проблема касалась рандомизации стека ядра, которая усложняет предсказание расположения данных в памяти. Некоторые архитектуры запускали механизм слишком поздно, а PowerPC применяла его неправильно и менее эффективно. Гляйкснер перевёл поддерживаемые архитектуры на общую схему, которая добавляет случайное смещение стека на раннем этапе.
Переработка также убирает лишние операции, упрощает проверки разрешения системных вызовов в ptrace и трассировщиках, учитывает изменение для seccomp и исправляет накопившиеся особенности кода x86. После изменений все архитектуры, использующие общий механизм входа, обрабатывают системные вызовы одинаково.
Разработчики не планируют менять поведение системы. Код для x86-64 стал немного компактнее, а тесты с большим числом системных вызовов показали небольшой прирост производительности. Изменения уже попали в ветку core/entry проекта tip и, как ожидается, войдут в окно слияния Linux 7.3.
<div class="articl-text-cover" style="position:relative;width:100%;max-width:800px;margin-left:auto;margin-right:auto;aspect-ratio:1200/675;margin-bottom:2rem;overflow:hidden">
Даже небольшая правка в старом коде ядра порой раскрывает целую цепочку накопившихся проблем, и именно такой разбор привёл к переработке механизма обработки системных вызовов, которую планируют включить в Linux 7.3.
Разработчик ядра Томас Гляйкснер изучал предложенное изменение в обработке номеров системных вызовов, но обнаружил различия в коде для разных процессорных архитектур. Системные вызовы позволяют программам обращаться к функциям ядра, поэтому код обрабатывает их при каждом переходе из пользовательского режима.
Главная проблема касалась рандомизации стека ядра, которая усложняет предсказание расположения данных в памяти. Некоторые архитектуры запускали механизм слишком поздно, а PowerPC применяла его неправильно и менее эффективно. Гляйкснер перевёл поддерживаемые архитектуры на общую схему, которая добавляет случайное смещение стека на раннем этапе.
Переработка также убирает лишние операции, упрощает проверки разрешения системных вызовов в ptrace и трассировщиках, учитывает изменение для seccomp и исправляет накопившиеся особенности кода x86. После изменений все архитектуры, использующие общий механизм входа, обрабатывают системные вызовы одинаково.
Разработчики не планируют менять поведение системы. Код для x86-64 стал немного компактнее, а тесты с большим числом системных вызовов показали небольшой прирост производительности. Изменения уже попали в ветку core/entry проекта tip и, как ожидается, войдут в окно слияния Linux 7.3.
- Источник новости
- www.securitylab.ru