x86/module: Use text_poke() for late relocations
Because of late module patching, a livepatch module needs to be able to apply some of its relocations well after it has been loaded. Instead of playing games with module_{dis,en}able_ro(), use existing text poking mechanisms to apply relocations after module loading. So far only x86, s390 and Power have HAVE_LIVEPATCH but only the first two also have STRICT_MODULE_RWX. This will allow removal of the last module_disable_ro() usage in livepatch. The ultimate goal is to completely disallow making executable mappings writable. [ jpoimboe: Split up patches. Use mod state to determine whether memcpy() can be used. Implement text_poke() for UML. ] Cc: x86@kernel.org Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Joe Lawrence <joe.lawrence@redhat.com> Acked-by: Miroslav Benes <mbenes@suse.cz> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
这个提交包含在:
@@ -362,3 +362,19 @@ void __init check_bugs(void)
|
||||
void apply_alternatives(struct alt_instr *start, struct alt_instr *end)
|
||||
{
|
||||
}
|
||||
|
||||
void *text_poke(void *addr, const void *opcode, size_t len)
|
||||
{
|
||||
/*
|
||||
* In UML, the only reference to this function is in
|
||||
* apply_relocate_add(), which shouldn't ever actually call this
|
||||
* because UML doesn't have live patching.
|
||||
*/
|
||||
WARN_ON(1);
|
||||
|
||||
return memcpy(addr, opcode, len);
|
||||
}
|
||||
|
||||
void text_poke_sync(void)
|
||||
{
|
||||
}
|
||||
|
在新工单中引用
屏蔽一个用户