diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c index 66a7c4befa0ee67750a54e168588898ad80ec754..89b31e8274255677e7d77e87f85da154a1134d53 100644 --- a/kernel/livepatch/core.c +++ b/kernel/livepatch/core.c @@ -1010,12 +1010,6 @@ static int klp_init_func(struct klp_object *obj, struct klp_func *func) int ret; #endif - if (!func->old_name || !func->new_func) - return -EINVAL; - - if (strlen(func->old_name) >= KSYM_NAME_LEN) - return -EINVAL; - #ifdef CONFIG_LIVEPATCH_WO_FTRACE ret = arch_klp_func_can_patch(func); if (ret) @@ -1105,6 +1099,16 @@ static int klp_init_object(struct klp_patch *patch, struct klp_object *obj) if (klp_is_module(obj) && strlen(obj->name) >= MODULE_NAME_LEN) return -EINVAL; + klp_for_each_func(obj, func) { + if (!func->old_name || !func->new_func) { + pr_err("old_name or new_func is invalid\n"); + return -EINVAL; + } + if (strlen(func->old_name) >= KSYM_NAME_LEN) { + pr_err("old_name is too long\n"); + return -EINVAL; + } + } obj->patched = false; obj->mod = NULL;