lkml.org 
[lkml]   [2016]   [Dec]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 12/15] livepatch: store function sizes
    Date
    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>
    ---
    include/linux/livepatch.h | 3 +++
    kernel/livepatch/core.c | 16 ++++++++++++++++
    2 files changed, 19 insertions(+)

    diff --git a/include/linux/livepatch.h b/include/linux/livepatch.h
    index 1e2eb91..1a5a93c 100644
    --- a/include/linux/livepatch.h
    +++ b/include/linux/livepatch.h
    @@ -37,6 +37,8 @@
    * @old_addr: the address of the function being patched
    * @kobj: kobject for sysfs resources
    * @stack_node: list node for klp_ops func_stack list
    + * @old_size: size of the old function
    + * @new_size: size of the new function
    * @patched: the func has been added to the klp_ops list
    */
    struct klp_func {
    @@ -56,6 +58,7 @@ struct klp_func {
    unsigned long old_addr;
    struct kobject kobj;
    struct list_head stack_node;
    + unsigned long old_size, new_size;
    bool patched;
    };

    diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
    index 8ca8a0e..fc160c6 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,
    &func->old_addr);
    if (ret)
    return ret;
    +
    + ret = kallsyms_lookup_size_offset(func->old_addr,
    + &func->old_size, NULL);
    + if (!ret) {
    + pr_err("kallsyms size lookup failed for '%s'\n",
    + func->old_name);
    + return -ENOENT;
    + }
    +
    + ret = kallsyms_lookup_size_offset((unsigned long)func->new_func,
    + &func->new_size, NULL);
    + if (!ret) {
    + pr_err("kallsyms size lookup failed for '%s' replacement\n",
    + func->old_name);
    + return -ENOENT;
    + }
    }

    return 0;
    --
    2.7.4
    \
     
     \ /
      Last update: 2016-12-08 19:16    [W:3.121 / U:0.512 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site