Merge tag 'livepatching-for-6.3' of git://git.kernel.org/pub/scm/linux/kernel/git/livepatching/livepatching

Pull livepatching updates from Petr Mladek:

 - Allow reloading a livepatched module by clearing livepatch-specific
   relocations in the livepatch module.

   Otherwise, the repeated load would fail on consistency checks.

* tag 'livepatching-for-6.3' of git://git.kernel.org/pub/scm/linux/kernel/git/livepatching/livepatching:
  livepatch,x86: Clear relocation targets on a module removal
  x86/module: remove unused code in __apply_relocate_add
This commit is contained in:
Linus Torvalds
2023-02-23 14:00:10 -08:00
3 changed files with 126 additions and 50 deletions

View File

@@ -75,6 +75,23 @@ int apply_relocate_add(Elf_Shdr *sechdrs,
unsigned int symindex,
unsigned int relsec,
struct module *mod);
#ifdef CONFIG_LIVEPATCH
/*
* Some architectures (namely x86_64 and ppc64) perform sanity checks when
* applying relocations. If a patched module gets unloaded and then later
* reloaded (and re-patched), klp re-applies relocations to the replacement
* function(s). Any leftover relocations from the previous loading of the
* patched module might trigger the sanity checks.
*
* To prevent that, when unloading a patched module, clear out any relocations
* that might trigger arch-specific sanity checks on a future module reload.
*/
void clear_relocate_add(Elf_Shdr *sechdrs,
const char *strtab,
unsigned int symindex,
unsigned int relsec,
struct module *me);
#endif
#else
static inline int apply_relocate_add(Elf_Shdr *sechdrs,
const char *strtab,