Сделать недействительным BPU на aarch64Linux

Ответить
Anonymous
 Сделать недействительным BPU на aarch64

Сообщение Anonymous »

Я использую процессор AArch64 (64-разрядная версия ARM) Neoverse-N3 и хочу сделать недействительным весь блок прогнозирования ветвей (BPU). Я наткнулся на следующую веб-страницу: https://developer.arm.com/documentation/110280/latest, на которой описаны несколько способов выполнения BPIALL.
Однако я не до конца понимаю, как это технически достигается.
Для процессоров Cortex-A73 и Cortex-A75 кажется правдоподобным сделать следующее: в AArch64 переключиться на AArch32, затем выполните BPIALL.
Мне интересно, возможен ли аналогичный подход на моем процессоре Neoverse-N3. А именно: могу ли я как-то переключиться в 32-битный режим, выполнить BPIALL и вернуться в 64-битный режим?
Также я встречал термин SMCCC_ARCH_WORKAROUND_1 (https://trustedfirmware-a.readthedocs.i ... tfv-6.html), который, насколько я понимаю, реализует смягчение последствий, которое фактически лишает законной силы BPU. Однако мне неясно, как следует выполнять этот вызов или как проверить, реализовано ли это в прошивке моего процессора.
Наконец, на той же странице обсуждается Spectre-BHB:

Чтобы защититься от атак через уровни исключений или состояния безопасности, Arm рекомендует отбрасывать историю ветвей при входе в исключение на более высокий уровень исключения. Способ зависит от микроархитектуры процессора:
  • Cortex-A65, Cortex-A65AE и Neoverse E1: Отключите и повторно включите MMU на самом высоком реализованном уровне исключений.
  • Cortex-A73 и Cortex-A75:

    В AArch32: аннулируйте предиктор ветвления с помощью инструкции BPIALL.
  • В AArch64: переключитесь в AArch32, затем выполните BPIALL с помощью кода Secure EL1.
[*]Все остальные уязвимые ядра: Вставьте обходной путь цикла с помощью количество итераций, зависящее от реализации («K»), которое отбрасывает историю ветвей при входе в исключение на более высокий уровень исключения.



Для Neoverse-N3 они указывают K=38. Означает ли это, что любой процессор Neoverse-N3 должен отслеживать 38 записей истории ветвей? Насколько я понимаю, реализация истории ветвей зависит от микроархитектуры ЦП, поэтому я не знаю, как интерпретировать это число.
Буду признателен за любые разъяснения по этим вопросам.
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/799 ... on-aarch64
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»