Re: livepatch: reuse module loader code to write relocations
From: Petr Mladek <hidden>
Date: 2015-11-12 09:16:17
Also in:
lkml
On Wed 2015-11-11 13:27:18, Jessica Yu wrote:
Basically, the patch module code is expected to build the reloc_secs list for each object that is being patched. For example in kpatch, the patch module generates this list in patch_init(). Like you guessed, it does go through all the elf sections of the patch module to find the reloc sections marked SHF_RELA_LIVEPATCH. We are able to access these sections through module->info, which is set up for livepatch modules before the module loader calls do_init_module() (and hence before patch_init(), See patch 2/5). See below for an example of how the reloc_secs list might be built: https://github.com/flaming-toast/kpatch/blob/no_dynrela_redux/kmod/patch/livepatch-patch-hook.c#L213
Thanks a lot for the link and explanation. I think that it would be nice to incorporate this into the patchset. I would put it into a separate function, e.g. klp_reloc_secs_init(). It can be called either from klp_register_patch() or from klp_init_patch().
Once the patch module has built this list, it is good to go for use in livepatch core. All livepatch has to do then is to iterate though the list, resolve any outstanding symbols, and call apply_relocate_add(), as shown in this patch. Miroslav mentioned in another email that we should start thinking about including documentation about this, including the expected patch module format. So perhaps v2 should include some documentation about this whole process somewhere.
That would be cool. Thank you, Petr