kpatch/9008-livepatch-patch-hook-support-force-enable-disable-fu.patch
Zhipeng Xie 428b311440 sync code to openeuler
sync latest code to openeuler

Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
2019-12-30 15:59:18 +08:00

46 lines
1.7 KiB
Diff

From aaaec2d292b7e1d07c35e07ba92917ee05a4a141 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Fri, 2 Nov 2018 17:25:03 +0000
Subject: [PATCH 1008/1015] livepatch-patch-hook: support force enable/disable
function
we use immediate to indicate patch which bypass stack check.
Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
---
kmod/patch/livepatch-patch-hook.c | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/kmod/patch/livepatch-patch-hook.c b/kmod/patch/livepatch-patch-hook.c
index 2c0cadd..625ffbd 100644
--- a/kmod/patch/livepatch-patch-hook.c
+++ b/kmod/patch/livepatch-patch-hook.c
@@ -228,6 +228,16 @@ extern struct kpatch_pre_patch_callback __kpatch_callbacks_pre_patch[], __kpatch
extern struct kpatch_post_patch_callback __kpatch_callbacks_post_patch[], __kpatch_callbacks_post_patch_end[];
extern struct kpatch_pre_unpatch_callback __kpatch_callbacks_pre_unpatch[], __kpatch_callbacks_pre_unpatch_end[];
extern struct kpatch_post_unpatch_callback __kpatch_callbacks_post_unpatch[], __kpatch_callbacks_post_unpatch_end[];
+extern unsigned long __kpatch_force_funcs[], __kpatch_force_funcs_end[];
+
+static int patch_is_func_forced(unsigned long addr)
+{
+ unsigned long *a;
+ for (a = __kpatch_force_funcs; a < __kpatch_force_funcs_end; a++)
+ if (*a == addr)
+ return 1;
+ return 0;
+}
#ifdef HAVE_CALLBACKS
static int add_callbacks_to_patch_objects(void)
@@ -393,6 +403,7 @@ static int __init patch_init(void)
lfunc = &lfuncs[j];
lfunc->old_name = func->kfunc->name;
lfunc->new_func = (void *)func->kfunc->new_addr;
+ lfunc->immediate = patch_is_func_forced(lfunc->new_func);
#ifdef HAVE_SYMPOS
lfunc->old_sympos = func->kfunc->sympos;
#else
--
1.7.5.4