Як перевірити, чи ввімкнено ядро ​​Linux «Retpoline» чи ні?


17

Що стосується вразливості безпеки "Spectre", "Retpoline" було введено як рішення для зменшення ризику. Однак я прочитав пост, в якому згадувалося:

Якщо ви будуєте ядро ​​без цього CONFIG_RETPOLINE, ви не можете створювати модулі з retpoline, а потім очікуєте, що вони завантажуватимуться - тому що символи Thunk не експортуються.

Якщо ви будуєте ядро ​​за допомогою retpoline, ви можете успішно завантажувати модулі, які не побудовані з retpoline. ( Джерело )

Чи є простий і загальний / загальний / уніфікований спосіб перевірити, чи ввімкнено ядро ​​"Retpoline" чи ні? Я хочу зробити це, щоб мій інсталятор міг використовувати належну модуль ядра для встановлення.

Відповіді:


21

Якщо ви використовуєте основні ядра або більшість основних ядер дистрибутивів, найкращий спосіб перевірити повну підтримку реполінії ( тобто ядро було налаштовано CONFIG_RETPOLINEі було створене за допомогою компілятора, здатного до реполінії) - шукати «Повний загальний реполіній »в /sys/devices/system/cpu/vulnerabilities/spectre_v2. У моїй системі:

$ cat /sys/devices/system/cpu/vulnerabilities/spectre_v2
Mitigation: Full generic retpoline, IBPB, IBRS_FW

Якщо ви хочете більш всебічних тестів, щоб виявити ретполіни на ядрах без spectre_v2файлу systree, перевірте, як spectre-meltdown-checkerвідбувається все.


2
Щоб перевірити також інші вразливості, пов’язані з кризою / привидами, запустіть $ grep . /sys/devices/system/cpu/vulnerabilities/*, що пропонується в блозі Грега Кроа-Хартмана .
Алекс Вонг

1
Спасибі @Alex; Я відповідав на конкретне запитання, але це корисно - хоча я віддаю перевагу head /sys/devices/system/cpu/vulnerabilities/*собі ;-). Наразі він охоплює вразливості Meltdown / Spectre, але також повинен охоплювати будь-які майбутні вразливості подібного характеру (простір імен цілеспрямовано загальний).
Стівен Кітт

@StephenKitt Так, headвиходить приємніше форматований вихід.
Алекс Вонг

4

Відповідь Стівена Кітта в цьому конкретному випадку є більш вичерпною, оскільки підтримка retpoline також потребує нової версії компілятора.

Але загалом у більшості дистрибутивів файл конфігурації ядра доступний в одному з наступних місць:

  • /boot/config-4.xx.xx-...
  • /proc/config.gz

Тоді можна просто zgrep CONFIG_RETPOLINE /boot/config* /proc/config.gz


4
Рекомендую не сприймати /boot/config*, оскільки це може виявитись CONFIG_RETPOLINEу встановленому, але наразі не запущеному образі ядра, що дає помилкове відчуття безпеки. Вивчає /proc/config.gzабо /sys/...є безпечним, але багато дистрибутивів Linux збирають ядро ​​без цього /proc/config.gz.
пт

Не могли б ви зробити логіку трохи розумнішою та використати Uname (або еквівалентний syscall), щоб отримати ядро, що працює в даний момент, а потім вивчити конкретний / завантажувальний / конфігураційний файл?
Адам Luchjenbroers

@pts /boot/config-$(uname -r), то?
муру

2
Використання /boot/config-$(uname -r)також не є надійним: воно все ще не гарантує, що конфігурація відповідає працюючому ядру. Ядра Distro залишаються однаковими uname -rдля кількох версій, доки ядро ​​ABI не зміниться.
Стівен Кітт

Дякую всім за вашу відповідь. Ваша відповідь та повідомлення корисні.
Вейшан Ян
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.