Linux 6.2 реализует поддержку стека динамических теневых вызовов для AArch64

Ядро Linux, созданное с помощью Clang, поддерживает стек теневых вызовов «SCS: для предотвращения перезаписи адреса возврата. С помощью исправлений, создаваемых для Linux 6.2, реализуется динамический стек теневых вызовов, чтобы избежать накладных расходов SCS на процессоры, поддерживающие аутентификацию по указателям (PAC).

Поддержка стека теневых вызовов полезна для защиты от перезаписи адреса возврата/переполнения буфера стека. Но на процессорах AArch64 с аутентификацией по указателям труднее обосновать полезность стека теневых вызовов. Таким образом, для Linux 6.2 планируется включить динамическую поддержку SCS, чтобы ее можно было включать/отключать во время загрузки. Эта поддержка динамического стека теневых вызовов осуществляется во время загрузки/во время выполнения посредством исправления кода.

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

Реализовать динамическую поддержку стека теневых вызовов в Clang, анализируя таблицы раскрутки во время инициализации, чтобы найти все вхождения инструкций PACIASP/AUTIASP, и заменяя их инструкциями push и pop стека теневых вызовов соответственно.

Это полезно, потому что накладные расходы на стек теневых вызовов трудно оправдать на оборудовании, которое реализует аутентификацию по указателю (PAC), и, учитывая, что инструкции PAC выполняются как NOP на оборудовании, которое этого не делает, мы можем просто заменить их, ничего не нарушая.. Поскольку PACIASP/AUTIASP гарантированно являются парными в отношении манипуляций с обратным адресом, замена их 1:1 на push и pop стека теневых вызовов гарантированно приведет к желаемому поведению.

В очереди через основной материал ARM64 «для следующего» находится динамический SCS и реализация его для ARM64 с помощью Clang. Во избежание возникновения каких-либо проблем, этот код, в свою очередь, будет представлен для окна слияния Linux 6.2 в следующем месяце.

Те, кто хочет узнать больше об инструментарии Clang Shadow Call Stack, могут сделать это через документацию Clang.
Поделиться:

Похожие публикации

Тут ничего нет

Нет комментариев