From 78572aab8125e7b3cdab55683fa3ad35c9bb07af Mon Sep 17 00:00:00 2001 From: Cheng Jian Date: Tue, 12 Feb 2019 21:26:15 +0800 Subject: [PATCH] livepatch/core: change module_get/put under STOP_MACHINE_CONSISTENCY euler inclusion category: bugfix Bugzilla: 9287/5507 CVE: N/A ---------------------------------------- module_get/put should protected by STOP_MACHINE_CONSISTENCY fix commit 49e30bb60ea ("livepatch/core: split livepatch consistency") Signed-off-by: Cheng Jian Reviewed-by: Zhen Lei Signed-off-by: Yang Yingliang --- kernel/livepatch/core.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c index 48b6ef397d12..639122738ca9 100644 --- a/kernel/livepatch/core.c +++ b/kernel/livepatch/core.c @@ -127,10 +127,10 @@ static int klp_find_object_module(struct klp_object *obj) * until mod->exit() finishes. This is especially important for * patches that modify semantic of the functions. */ -#ifdef CONFIG_LIVEPATCH_FTRACE +#ifdef CONFIG_LIVEPATCH_PER_TASK_CONSISTENCY if (mod && mod->klp_alive) obj->mod = mod; -#else +#elif defined(CONFIG_LIVEPATCH_STOP_MACHINE_CONSISTENCY) if (!mod) { pr_err("module '%s' not loaded\n", obj->name); mutex_unlock(&module_mutex); @@ -141,7 +141,7 @@ static int klp_find_object_module(struct klp_object *obj) } else { obj->mod = mod; } -#endif /* ifdef CONFIG_LIVEPATCH_FTRACE */ +#endif /* ifdef CONFIG_LIVEPATCH_PER_TASK_CONSISTENCY */ mutex_unlock(&module_mutex); return 0; @@ -979,9 +979,10 @@ static void klp_free_objects_limited(struct klp_patch *patch, struct klp_object *obj; for (obj = patch->objs; obj->funcs && obj != limit; obj++) { +#ifdef CONFIG_LIVEPATCH_STOP_MACHINE_CONSISTENCY if (klp_is_module(obj)) module_put(obj->mod); - +#endif klp_free_funcs_limited(obj, NULL); kobject_put(&obj->kobj); } @@ -1130,7 +1131,9 @@ static int klp_init_object(struct klp_patch *patch, struct klp_object *obj) out: kobject_put(&obj->kobj); put: +#ifdef CONFIG_LIVEPATCH_STOP_MACHINE_CONSISTENCY module_put(obj->mod); +#endif return ret; } -- GitLab