Как проверить, было ли текущее ядро Linux загружено с помощью kexec?

sudo pacman -Rdd kwallet

У меня сработало

7
01.07.2016, 07:54
1 ответ

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

Например, у вас есть система, которая НЕ стирает ОЗУ при загрузке (очистка памяти при загрузке требуется некоторыми спецификациями безопасной загрузки и т. Д.); Первоначальный процесс загрузки и каждая нормальная перезагрузка обычно происходят с одними и теми же смещениями и со временем стирают все, что было при предыдущей загрузке. Само ядро ​​почти всегда загружается по одному и тому же адресу.

Теперь рассмотрите kexec вместо обычной перезагрузки и поймите, что все должно завершаться с одинаковыми смещениями и в основном неразличимо.

Существуют ли особые случаи, когда можно обнаружить kexec? ДА!

  • Kdump явно загружает новое ядро ​​по другому адресу, и надеется сохранить память предыдущего ядра для захвата состояния ошибки .
  • Если BIOS и ядро ​​инициализируют оборудование по-разному, это (очевидно) может быть отмечено, поскольку при каждой загрузке с переключателем «обычный / kexec» будут происходить изменения.
  • В качестве конкретного примера, буфер кадра EFI определенно изменяется ядром во время загрузки и никогда не возвращается в исходное состояние на kexec.
  • Следствием этого является то, что если вы не контролируете загрузку ядра kexec'd, и оно касается аппаратного обеспечения, почти невозможно позже решить если это был настоящий ботинок или kexec ботинок.

В качестве демонстрации я загрузил виртуальную машину с ядром, захватил dmesg, затем сразу же сделал жесткий kexec и снова захватил dmesg. Вот разница между двумя запусками dmesg: https://gist.github.com/robbat2/7609be2715591eac8ace3f46e852c549

8
27.01.2020, 20:18

Теги

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