以下の内容はhttps://kernhack.hatenablog.com/entry/2016/07/28/002211より取得しました。


linux 4.7でライブパッチ用のカーネルモジュールにelfのセクションチェックが入ったのでめも

Linux 4.7からライブパッチ用のカーネルモジュールをロードする時にELFのセクションをチェックするようになりました。

このチェックが入ったこととで、今までのモジュールを再コンパイルするだけだと以下のようなエラーになってロードに失敗します。

[  153.824961] livepatch: module livetest is not marked as a livepatch module
[  153.826718] livetest: failed to register patch

これはkernel/livepatch/core.cのklp_resolve_symbols()という関数でチェックしています。

233         for (i = 0; i < relasec->sh_size / sizeof(Elf_Rela); i++) {
234                 sym = pmod->core_kallsyms.symtab + ELF_R_SYM(relas[i].r_info);
235                 if (sym->st_shndx != SHN_LIVEPATCH) {
236                         pr_err("symbol %s is not marked as a livepatch symbol",
237                                strtab + sym->st_name);
238                         return -EINVAL;
239                 }

SHN_LIVEPATCHはinclude/uapi/linux/elf.hで定義されています。 これをどうやって設定するかですが、livepatch: reuse module loader code to write relocations · torvalds/linux@425595a · GitHubを見ると、

MODULE_INFO(livepatch, "Y");

こんな行が追加されているので、自分のモジュールにも追加します。そして再度コンパイルすればロードできるようになります。




以上の内容はhttps://kernhack.hatenablog.com/entry/2016/07/28/002211より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14