Commit 478efe08 authored by Zheng Yejian's avatar Zheng Yejian Committed by openeuler-sync-bot
Browse files

livepatch/core: Disable support for replacing

hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I8ORHJ



--------------------------------

Replacing is an optimization for livepatching based on ftrace, the
wo_ftrace solution do not support it.

Signed-off-by: default avatarZheng Yejian <zhengyejian1@huawei.com>
(cherry picked from commit f902150d)
parent 3ed9e131
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -1156,6 +1156,9 @@ static void klp_init_func_early(struct klp_object *obj,
	kobject_init(&func->kobj, &klp_ktype_func);
	list_add_tail(&func->node, &obj->func_list);
	func->func_node = NULL;
#ifdef CONFIG_LIVEPATCH_STOP_MACHINE_CONSISTENCY
	func->nop = false;
#endif
}

static void klp_init_object_early(struct klp_patch *patch,
@@ -1166,6 +1169,7 @@ static void klp_init_object_early(struct klp_patch *patch,
	list_add_tail(&obj->node, &patch->obj_list);
#ifdef CONFIG_LIVEPATCH_STOP_MACHINE_CONSISTENCY
	obj->mod = NULL;
	obj->dynamic = false;
#endif
}

@@ -1245,6 +1249,12 @@ static int klp_init_patch(struct klp_patch *patch)
	if (ret)
		return ret;

#ifdef CONFIG_LIVEPATCH_STOP_MACHINE_CONSISTENCY
	if (patch->replace) {
		pr_err("Replacing is not supported\n");
		return -EINVAL;
	}
#endif
	if (patch->replace) {
		ret = klp_add_nops(patch);
		if (ret)
+2 −0
Original line number Diff line number Diff line
@@ -315,7 +315,9 @@ int klp_patch_object(struct klp_object *obj, bool rollback)
	if (obj->patched)
		return 0;

	WARN_ON(obj->dynamic);
	klp_for_each_func(obj, func) {
		WARN_ON(func->nop);
		ret = klp_patch_func(func);
		if (ret && klp_need_rollback(ret, rollback)) {
			klp_unpatch_object(obj);