Новости Потянули за ниточку. Мелкая правка заставила полностью переписать логику вызовов в Linux 7.3

NewsMaker

I'm just a script
Премиум
28,291
46
8 Ноя 2022
Один вопрос к старому коду вскрыл то, что годами оставалось незаметным.

<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">
spljzpyrdoyiyjm23762wbcqnrlcfqgm.jpg

Даже небольшая правка в старом коде ядра порой раскрывает целую цепочку накопившихся проблем, и именно такой разбор привёл к переработке механизма обработки системных вызовов, которую планируют включить в Linux 7.3.

Разработчик ядра Томас Гляйкснер изучал предложенное изменение в обработке номеров системных вызовов, но обнаружил различия в коде для разных процессорных архитектур. Системные вызовы позволяют программам обращаться к функциям ядра, поэтому код обрабатывает их при каждом переходе из пользовательского режима.

Главная проблема касалась рандомизации стека ядра, которая усложняет предсказание расположения данных в памяти. Некоторые архитектуры запускали механизм слишком поздно, а PowerPC применяла его неправильно и менее эффективно. Гляйкснер перевёл поддерживаемые архитектуры на общую схему, которая добавляет случайное смещение стека на раннем этапе.

Переработка также убирает лишние операции, упрощает проверки разрешения системных вызовов в ptrace и трассировщиках, учитывает изменение для seccomp и исправляет накопившиеся особенности кода x86. После изменений все архитектуры, использующие общий механизм входа, обрабатывают системные вызовы одинаково.

Разработчики не планируют менять поведение системы. Код для x86-64 стал немного компактнее, а тесты с большим числом системных вызовов показали небольшой прирост производительности. Изменения уже попали в ветку core/entry проекта tip и, как ожидается, войдут в окно слияния Linux 7.3.
 
Источник новости
www.securitylab.ru