lkml.org 
[lkml]   [2015]   [May]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC kgr on klp 2/9] livepatch: introduce patch/func-walking helpers
    Date
    klp_for_each_object and klp_for_each_func are now used all over the
    code. One need not think what is the proper condition to check in the
    for loop now.

    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    ---
    include/linux/livepatch.h | 6 ++++++
    kernel/livepatch/core.c | 18 +++++++++---------
    2 files changed, 15 insertions(+), 9 deletions(-)

    diff --git a/include/linux/livepatch.h b/include/linux/livepatch.h
    index fe45f2f02c8d..31db7a05dd36 100644
    --- a/include/linux/livepatch.h
    +++ b/include/linux/livepatch.h
    @@ -123,6 +123,12 @@ struct klp_patch {
    enum klp_state state;
    };

    +#define klp_for_each_object(patch, obj) \
    + for (obj = patch->objs; obj->funcs; obj++)
    +
    +#define klp_for_each_func(obj, func) \
    + for (func = obj->funcs; func->old_name; func++)
    +
    int klp_register_patch(struct klp_patch *);
    int klp_unregister_patch(struct klp_patch *);
    int klp_enable_patch(struct klp_patch *);
    diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
    index e163faaef5e9..2da42be84452 100644
    --- a/kernel/livepatch/core.c
    +++ b/kernel/livepatch/core.c
    @@ -422,7 +422,7 @@ static void klp_disable_object(struct klp_object *obj)
    {
    struct klp_func *func;

    - for (func = obj->funcs; func->old_name; func++)
    + klp_for_each_func(obj, func)
    if (func->state == KLP_ENABLED)
    klp_disable_func(func);

    @@ -440,7 +440,7 @@ static int klp_enable_object(struct klp_object *obj)
    if (WARN_ON(!klp_is_object_loaded(obj)))
    return -EINVAL;

    - for (func = obj->funcs; func->old_name; func++) {
    + klp_for_each_func(obj, func) {
    ret = klp_enable_func(func);
    if (ret) {
    klp_disable_object(obj);
    @@ -463,7 +463,7 @@ static int __klp_disable_patch(struct klp_patch *patch)

    pr_notice("disabling patch '%s'\n", patch->mod->name);

    - for (obj = patch->objs; obj->funcs; obj++) {
    + klp_for_each_object(patch, obj) {
    if (obj->state == KLP_ENABLED)
    klp_disable_object(obj);
    }
    @@ -523,7 +523,7 @@ static int __klp_enable_patch(struct klp_patch *patch)

    pr_notice("enabling patch '%s'\n", patch->mod->name);

    - for (obj = patch->objs; obj->funcs; obj++) {
    + klp_for_each_object(patch, obj) {
    if (!klp_is_object_loaded(obj))
    continue;

    @@ -689,7 +689,7 @@ static void klp_free_object_loaded(struct klp_object *obj)

    obj->mod = NULL;

    - for (func = obj->funcs; func->old_name; func++)
    + klp_for_each_func(obj, func)
    func->old_addr = 0;
    }

    @@ -738,7 +738,7 @@ static int klp_init_object_loaded(struct klp_patch *patch,
    return ret;
    }

    - for (func = obj->funcs; func->old_name; func++) {
    + klp_for_each_func(obj, func) {
    ret = klp_find_verify_func_addr(obj, func);
    if (ret)
    return ret;
    @@ -767,7 +767,7 @@ static int klp_init_object(struct klp_patch *patch, struct klp_object *obj)
    if (ret)
    return ret;

    - for (func = obj->funcs; func->old_name; func++) {
    + klp_for_each_func(obj, func) {
    ret = klp_init_func(obj, func);
    if (ret)
    goto free;
    @@ -804,7 +804,7 @@ static int klp_init_patch(struct klp_patch *patch)
    if (ret)
    goto unlock;

    - for (obj = patch->objs; obj->funcs; obj++) {
    + klp_for_each_object(patch, obj) {
    ret = klp_init_object(patch, obj);
    if (ret)
    goto free;
    @@ -959,7 +959,7 @@ static int klp_module_notify(struct notifier_block *nb, unsigned long action,
    mod->klp_alive = false;

    list_for_each_entry(patch, &klp_patches, list) {
    - for (obj = patch->objs; obj->funcs; obj++) {
    + klp_for_each_object(patch, obj) {
    if (!klp_is_module(obj) || strcmp(obj->name, mod->name))
    continue;

    --
    2.3.5


    \
     
     \ /
      Last update: 2015-05-04 14:01    [W:4.028 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site