Linux 4.12: livepatch: 適用したライブパッチを無効化する機能の動作確認
久々のLinuxの記事です。
一つ前のリリースですが、Linux 4.12でライブパッチ(livepatch)へ機能追加がなされ、
適用したライブパッチを無効化することができるようになりました。
サンプルに記載のとおりですが、試してみたので記事にしてみます。
なお、ライブパッチについてはLinux 4.0で追加されてからちょこちょこと記事を書いていますので、良ければ見てみてください
- Linux 4.0ビルド・起動確認と、ライブパッチソースの在り処 - へにゃぺんて@日々勉強のまとめ
- out of treeでライブパッチを試す、/dev/nullへのパッチ紹介 - へにゃぺんて@日々勉強のまとめ
1. 有効化するカーネルコンフィギュレーション
menuconfigで
- CONFIG_LIVEPATCH
- CONFIG_SAMPLE_LIVEPATCH
を有効化します。
なお、ビルド・インストール方法は、上述の記事をみてみてください。
変更したい項目のmenuconfig内の場所は、
menuconfig画面内で"/"キーを押すとコンフィグ内を検索できます。
"livepatch"で検索すると、コンフィグの場所を調べることが出来ます。
なお、ftrace関係のコンフィグが有効化されていないとlivepatchのコンフィグは現れません。
(コンフィグの依存関係は"Debpnds on"に書かれていて、見方も上述の記事で少し説明しています。)
2. サンプルの試し方
カーネルをビルドすると、ライブパッチのサンプル(livepatch-sample.ko)は、
linux/samples/livepatch/livepatch-sample.c に出来上がっています。
このサンプルは /proc/cmdline を変更するライブパッチで、
insmod livepatch-sample.ko した後、
/proc/cmdline をreadすると"this has been live patched"が読めます。
そして、
$ echo 0 > /sys/kernel/livepatch/livepatch_sample/enabled
を実行すると、適用したパッチを無効化出来ます。
補足. UEFI用のイメージとしてビルドしたカーネルを使用する
上記の実行例では、UEFI用のイメージ(UEFIアプリケーション)として実行できるように
Linuxカーネルをビルドしています。
そうすることで、PC内蔵のUEFIシェル、あるいは配布されているUEFIシェル[*1]を使用して、
Linuxカーネルを起動できます。
[*1] https://github.com/tianocore/edk2/tree/master/EdkShellBinPkg/FullShell/X64
2. qemuとovmfをインストール
$ sudo apt-get install qemu-system-x86 $ sudo apt-get install ovmf