diff options
author | Petr Mladek <pmladek@suse.com> | 2019-01-09 07:43:19 -0500 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2019-01-11 14:51:23 -0500 |
commit | 19514910d021c93c7823ec32067e6b7dea224f0f (patch) | |
tree | 3df053de0eb62fec2557e24bd807cae328d4f21a /kernel/livepatch/patch.h | |
parent | 1686cc1a31f45a3fd090e5d0c6fce777422e13fa (diff) |
livepatch: Change unsigned long old_addr -> void *old_func in struct klp_func
The address of the to be patched function and new function is stored
in struct klp_func as:
void *new_func;
unsigned long old_addr;
The different naming scheme and type are derived from the way
the addresses are set. @old_addr is assigned at runtime using
kallsyms-based search. @new_func is statically initialized,
for example:
static struct klp_func funcs[] = {
{
.old_name = "cmdline_proc_show",
.new_func = livepatch_cmdline_proc_show,
}, { }
};
This patch changes unsigned long old_addr -> void *old_func. It removes
some confusion when these address are later used in the code. It is
motivated by a followup patch that adds special NOP struct klp_func
where we want to assign func->new_func = func->old_addr respectively
func->new_func = func->old_func.
This patch does not modify the existing behavior.
Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
Acked-by: Miroslav Benes <mbenes@suse.cz>
Acked-by: Joe Lawrence <joe.lawrence@redhat.com>
Acked-by: Alice Ferrazzi <alice.ferrazzi@gmail.com>
Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'kernel/livepatch/patch.h')
-rw-r--r-- | kernel/livepatch/patch.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/livepatch/patch.h b/kernel/livepatch/patch.h index e72d8250d04b..a9b16e513656 100644 --- a/kernel/livepatch/patch.h +++ b/kernel/livepatch/patch.h | |||
@@ -10,7 +10,7 @@ | |||
10 | * struct klp_ops - structure for tracking registered ftrace ops structs | 10 | * struct klp_ops - structure for tracking registered ftrace ops structs |
11 | * | 11 | * |
12 | * A single ftrace_ops is shared between all enabled replacement functions | 12 | * A single ftrace_ops is shared between all enabled replacement functions |
13 | * (klp_func structs) which have the same old_addr. This allows the switch | 13 | * (klp_func structs) which have the same old_func. This allows the switch |
14 | * between function versions to happen instantaneously by updating the klp_ops | 14 | * between function versions to happen instantaneously by updating the klp_ops |
15 | * struct's func_stack list. The winner is the klp_func at the top of the | 15 | * struct's func_stack list. The winner is the klp_func at the top of the |
16 | * func_stack (front of the list). | 16 | * func_stack (front of the list). |
@@ -25,7 +25,7 @@ struct klp_ops { | |||
25 | struct ftrace_ops fops; | 25 | struct ftrace_ops fops; |
26 | }; | 26 | }; |
27 | 27 | ||
28 | struct klp_ops *klp_find_ops(unsigned long old_addr); | 28 | struct klp_ops *klp_find_ops(void *old_func); |
29 | 29 | ||
30 | int klp_patch_object(struct klp_object *obj); | 30 | int klp_patch_object(struct klp_object *obj); |
31 | void klp_unpatch_object(struct klp_object *obj); | 31 | void klp_unpatch_object(struct klp_object *obj); |