diff options
author | Jiri Slaby <jslaby@suse.cz> | 2015-05-19 06:01:19 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2015-05-19 17:58:43 -0400 |
commit | 8cdd043ab32c2ff28d2a77c514a768a9edce244c (patch) | |
tree | 532e856e533309a4b22f22adadc31c5e45672252 /kernel/livepatch | |
parent | cad706df7e4a00a595f2662f32c0fc174aa4e61f (diff) |
livepatch: introduce patch/func-walking helpers
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>
Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'kernel/livepatch')
-rw-r--r-- | kernel/livepatch/core.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c index e997782362c3..c38398e20f64 100644 --- a/kernel/livepatch/core.c +++ b/kernel/livepatch/core.c | |||
@@ -422,7 +422,7 @@ static void klp_disable_object(struct klp_object *obj) | |||
422 | { | 422 | { |
423 | struct klp_func *func; | 423 | struct klp_func *func; |
424 | 424 | ||
425 | for (func = obj->funcs; func->old_name; func++) | 425 | klp_for_each_func(obj, func) |
426 | if (func->state == KLP_ENABLED) | 426 | if (func->state == KLP_ENABLED) |
427 | klp_disable_func(func); | 427 | klp_disable_func(func); |
428 | 428 | ||
@@ -440,7 +440,7 @@ static int klp_enable_object(struct klp_object *obj) | |||
440 | if (WARN_ON(!klp_is_object_loaded(obj))) | 440 | if (WARN_ON(!klp_is_object_loaded(obj))) |
441 | return -EINVAL; | 441 | return -EINVAL; |
442 | 442 | ||
443 | for (func = obj->funcs; func->old_name; func++) { | 443 | klp_for_each_func(obj, func) { |
444 | ret = klp_enable_func(func); | 444 | ret = klp_enable_func(func); |
445 | if (ret) { | 445 | if (ret) { |
446 | klp_disable_object(obj); | 446 | klp_disable_object(obj); |
@@ -463,7 +463,7 @@ static int __klp_disable_patch(struct klp_patch *patch) | |||
463 | 463 | ||
464 | pr_notice("disabling patch '%s'\n", patch->mod->name); | 464 | pr_notice("disabling patch '%s'\n", patch->mod->name); |
465 | 465 | ||
466 | for (obj = patch->objs; obj->funcs; obj++) { | 466 | klp_for_each_object(patch, obj) { |
467 | if (obj->state == KLP_ENABLED) | 467 | if (obj->state == KLP_ENABLED) |
468 | klp_disable_object(obj); | 468 | klp_disable_object(obj); |
469 | } | 469 | } |
@@ -523,7 +523,7 @@ static int __klp_enable_patch(struct klp_patch *patch) | |||
523 | 523 | ||
524 | pr_notice("enabling patch '%s'\n", patch->mod->name); | 524 | pr_notice("enabling patch '%s'\n", patch->mod->name); |
525 | 525 | ||
526 | for (obj = patch->objs; obj->funcs; obj++) { | 526 | klp_for_each_object(patch, obj) { |
527 | if (!klp_is_object_loaded(obj)) | 527 | if (!klp_is_object_loaded(obj)) |
528 | continue; | 528 | continue; |
529 | 529 | ||
@@ -689,7 +689,7 @@ static void klp_free_object_loaded(struct klp_object *obj) | |||
689 | 689 | ||
690 | obj->mod = NULL; | 690 | obj->mod = NULL; |
691 | 691 | ||
692 | for (func = obj->funcs; func->old_name; func++) | 692 | klp_for_each_func(obj, func) |
693 | func->old_addr = 0; | 693 | func->old_addr = 0; |
694 | } | 694 | } |
695 | 695 | ||
@@ -738,7 +738,7 @@ static int klp_init_object_loaded(struct klp_patch *patch, | |||
738 | return ret; | 738 | return ret; |
739 | } | 739 | } |
740 | 740 | ||
741 | for (func = obj->funcs; func->old_name; func++) { | 741 | klp_for_each_func(obj, func) { |
742 | ret = klp_find_verify_func_addr(obj, func); | 742 | ret = klp_find_verify_func_addr(obj, func); |
743 | if (ret) | 743 | if (ret) |
744 | return ret; | 744 | return ret; |
@@ -767,7 +767,7 @@ static int klp_init_object(struct klp_patch *patch, struct klp_object *obj) | |||
767 | if (ret) | 767 | if (ret) |
768 | return ret; | 768 | return ret; |
769 | 769 | ||
770 | for (func = obj->funcs; func->old_name; func++) { | 770 | klp_for_each_func(obj, func) { |
771 | ret = klp_init_func(obj, func); | 771 | ret = klp_init_func(obj, func); |
772 | if (ret) | 772 | if (ret) |
773 | goto free; | 773 | goto free; |
@@ -804,7 +804,7 @@ static int klp_init_patch(struct klp_patch *patch) | |||
804 | if (ret) | 804 | if (ret) |
805 | goto unlock; | 805 | goto unlock; |
806 | 806 | ||
807 | for (obj = patch->objs; obj->funcs; obj++) { | 807 | klp_for_each_object(patch, obj) { |
808 | ret = klp_init_object(patch, obj); | 808 | ret = klp_init_object(patch, obj); |
809 | if (ret) | 809 | if (ret) |
810 | goto free; | 810 | goto free; |
@@ -961,7 +961,7 @@ static int klp_module_notify(struct notifier_block *nb, unsigned long action, | |||
961 | mod->klp_alive = false; | 961 | mod->klp_alive = false; |
962 | 962 | ||
963 | list_for_each_entry(patch, &klp_patches, list) { | 963 | list_for_each_entry(patch, &klp_patches, list) { |
964 | for (obj = patch->objs; obj->funcs; obj++) { | 964 | klp_for_each_object(patch, obj) { |
965 | if (!klp_is_module(obj) || strcmp(obj->name, mod->name)) | 965 | if (!klp_is_module(obj) || strcmp(obj->name, mod->name)) |
966 | continue; | 966 | continue; |
967 | 967 | ||