mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-21 22:21:21 +00:00
livepatch: Use lists to manage patches, objects and functions
Currently klp_patch contains a pointer to a statically allocated array of struct klp_object and struct klp_objects contains a pointer to a statically allocated array of klp_func. In order to allow for the dynamic allocation of objects and functions, link klp_patch, klp_object, and klp_func together via linked lists. This allows us to more easily allocate new objects and functions, while having the iterator be a simple linked list walk. The static structures are added to the lists early. It allows to add the dynamically allocated objects before klp_init_object() and klp_init_func() calls. Therefore it reduces the further changes to the code. This patch does not change the existing behavior. Signed-off-by: Jason Baron <jbaron@akamai.com> [pmladek@suse.com: Initialize lists before init calls] Signed-off-by: Petr Mladek <pmladek@suse.com> Acked-by: Miroslav Benes <mbenes@suse.cz> Acked-by: Joe Lawrence <joe.lawrence@redhat.com> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Jiri Kosina <jikos@kernel.org> Acked-by: Josh Poimboeuf <jpoimboe@redhat.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
958ef1e39d
commit
20e5502595
2 changed files with 24 additions and 4 deletions
|
@ -659,20 +659,25 @@ static int klp_init_patch_early(struct klp_patch *patch)
|
|||
return -EINVAL;
|
||||
|
||||
INIT_LIST_HEAD(&patch->list);
|
||||
INIT_LIST_HEAD(&patch->obj_list);
|
||||
patch->kobj_added = false;
|
||||
patch->enabled = false;
|
||||
patch->forced = false;
|
||||
INIT_WORK(&patch->free_work, klp_free_patch_work_fn);
|
||||
init_completion(&patch->finish);
|
||||
|
||||
klp_for_each_object(patch, obj) {
|
||||
klp_for_each_object_static(patch, obj) {
|
||||
if (!obj->funcs)
|
||||
return -EINVAL;
|
||||
|
||||
INIT_LIST_HEAD(&obj->func_list);
|
||||
obj->kobj_added = false;
|
||||
list_add_tail(&obj->node, &patch->obj_list);
|
||||
|
||||
klp_for_each_func(obj, func)
|
||||
klp_for_each_func_static(obj, func) {
|
||||
func->kobj_added = false;
|
||||
list_add_tail(&func->node, &obj->func_list);
|
||||
}
|
||||
}
|
||||
|
||||
if (!try_module_get(patch->mod))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue