aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorJiri Slaby <jslaby@suse.cz>2015-05-19 06:01:19 -0400
committerJiri Kosina <jkosina@suse.cz>2015-05-19 17:58:43 -0400
commit8cdd043ab32c2ff28d2a77c514a768a9edce244c (patch)
tree532e856e533309a4b22f22adadc31c5e45672252 /kernel
parentcad706df7e4a00a595f2662f32c0fc174aa4e61f (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')
-rw-r--r--kernel/livepatch/core.c18
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