Как проверить, включено ли ядро ​​Linux «Retpoline» или нет?

Вы можете вернуть только целое число от 0 до 255 из функции оболочки. Это то же ограничение, что и для исполняемого файла. Различные оболочки по-разному реагируют, если вы передаете нечисловой аргумент; bash выводит сообщение об ошибке.

$ bash -c 'f () { return true; }; f; echo $?'                    
bash: line 0: return: true: numeric argument required
2

Передайте 0 для истины и любое значение от 1 до 125 для ложного, как при выходе из программы. Значения от 126 до 255 также неверны, но имеют обычное значение (невозможно запустить программу или программа прервана сигналом).

function is_log_started()
{
        if test -f "log/server.log"; then
                return 0
        fi
        return 1
}

Но это сложный способ записи.

function is_log_started
{
        test -f "log/server.log"
}

Статус возврата из функции оболочки - это статус возврата последнего выполненного оператора.

Ваш тест также неверен. [is_log_started = true] проверяет, являются ли is_log_started и true одной и той же строкой. Чтобы проверить, истинно ли возвращаемое состояние вызова функции, вы просто вызываете функцию. Каждая команда оболочки уже является логической: true, если команда возвращает 0, иначе false.

function is_log_started
{
        test -f "log/server.log"
}
if is_log_started; then
    echo "log started"
fi
18
07.04.2018, 15:39
2 ответа

Если вы используете основные ядра или ядра большинства основных дистрибутивов, лучший способ проверить полную поддержку ретполина (, т.е. ядро ​​было сконфигурировано с 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обстоят дела.

24
27.01.2020, 19:46

В данном конкретном случае ответ Стивена Китта более исчерпывающий, поскольку для поддержки ретполина также требуется новая версия компилятора.

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

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

Тогда вы можете простоzgrep CONFIG_RETPOLINE /boot/config* /proc/config.gz

4
27.01.2020, 19:46

Теги

Похожие вопросы