diff options
| author | Josh Poimboeuf <jpoimboe@redhat.com> | 2017-02-13 20:42:39 -0500 |
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2017-03-08 03:24:04 -0500 |
| commit | f5e547f4ac785c65a39211f0b8e4ffc4fe09112d (patch) | |
| tree | 8a4826c72030d35bfed306ac748463c25b536cd0 /kernel/livepatch | |
| parent | 68ae4b2b687c3da59ca1d762646ddece4ea1c438 (diff) | |
livepatch: store function sizes
For the consistency model we'll need to know the sizes of the old and
new functions to determine if they're on the stacks of any tasks.
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Acked-by: Miroslav Benes <mbenes@suse.cz>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Reviewed-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'kernel/livepatch')
| -rw-r--r-- | kernel/livepatch/core.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c index 83c4949862b4..10ba3a1578bd 100644 --- a/kernel/livepatch/core.c +++ b/kernel/livepatch/core.c | |||
| @@ -584,6 +584,22 @@ static int klp_init_object_loaded(struct klp_patch *patch, | |||
| 584 | &func->old_addr); | 584 | &func->old_addr); |
| 585 | if (ret) | 585 | if (ret) |
| 586 | return ret; | 586 | return ret; |
| 587 | |||
| 588 | ret = kallsyms_lookup_size_offset(func->old_addr, | ||
| 589 | &func->old_size, NULL); | ||
| 590 | if (!ret) { | ||
| 591 | pr_err("kallsyms size lookup failed for '%s'\n", | ||
| 592 | func->old_name); | ||
| 593 | return -ENOENT; | ||
| 594 | } | ||
| 595 | |||
| 596 | ret = kallsyms_lookup_size_offset((unsigned long)func->new_func, | ||
| 597 | &func->new_size, NULL); | ||
| 598 | if (!ret) { | ||
| 599 | pr_err("kallsyms size lookup failed for '%s' replacement\n", | ||
| 600 | func->old_name); | ||
| 601 | return -ENOENT; | ||
| 602 | } | ||
| 587 | } | 603 | } |
| 588 | 604 | ||
| 589 | return 0; | 605 | return 0; |
