現在実行中のLinuxカーネルがkexecによってロードされているかどうかを確認する方法は?

現在実行中のLinuxカーネルがkexecによってロードされているかどうかを確認する方法は?

確認することは非常に信頼できることを意味します。つまり、ローダーの構成や使用可能なカーネルファイルを分析し、unameの出力を一致させることは明らかにオプションではありません。

ベストアンサー1

一般的なケースではありません。以前の状態のどれも信頼できず、定期的な再起動と区別できないため、これは不可能です。

たとえば、システムは起動時にRAMを消去しません(特定のセキュリティ起動仕様などでは起動時にメモリを消去する必要があります)。通常、すべての通常の再起動は同じオフセットで発生し、時間が経過するとすべての内容が消去されます。最後のブートから。カーネル自体はほぼ常に同じアドレスにロードされます。

これで、通常の再起動の代わりにkexecを使用することを検討し、すべてが同じオフセットで終わり、本質的に区別することはできません。

kexecを検出できる特別なケースはありますか?はい!

  • Kdumpは別のアドレスに新しいカーネルを明示的にロードし、古いカーネルのメモリを保存してエラー状態をキャッチします。
  • 「usual / kexec」スイッチを使用して起動するたびにハードウェアが変更されるため、BIOSとカーネルがハードウェアを別々に初期化している場合は、これがわかります。
  • 具体的な例として、EFIフレームバッファはブート時にカーネルによって確実に変更され、kexecから元の状態に戻されません。
  • これで得られるのは、kexecカーネルの実行を制御せずにハードウェアに触れる場合、後でそれがkexecカーネルかどうかを確認する方法がほとんどないことです。本物起動またはプログラムの実行始めます。

デモとして、カーネルのある仮想マシンを起動し、dmesgをキャプチャし、すぐにハードkexecしてdmesgを再キャプチャしました。 dmesgを2回実行することの違いは次のとおりです。https://gist.github.com/robbat2/7609be2715591eac8ace3f46e852c549

おすすめ記事