From da76d8c7378ef23f93150274e33bef78c341b041 Mon Sep 17 00:00:00 2001 From: yieux Date: Thu, 9 Nov 2023 19:42:51 +0800 Subject: [PATCH] =?UTF-8?q?bug=20fix=20=E4=BF=AE=E5=A4=8Dtimer=20hook=20ex?= =?UTF-8?q?it=E5=88=A4=E6=96=AD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../secDetector_mc_kmodule_list.c | 1 - .../secDetector_memory_corruption.c | 2 +- kerneldriver/core/hook_unit/secDetector_hook.c | 14 ++++++++------ kerneldriver/core/secDetector_manager.c | 4 ++-- kerneldriver/core/secDetector_workflow.c | 5 ++--- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/kerneldriver/cases/memory_corruption/secDetector_mc_kmodule_list.c b/kerneldriver/cases/memory_corruption/secDetector_mc_kmodule_list.c index 722a96c..283590b 100644 --- a/kerneldriver/cases/memory_corruption/secDetector_mc_kmodule_list.c +++ b/kerneldriver/cases/memory_corruption/secDetector_mc_kmodule_list.c @@ -27,7 +27,6 @@ void check_kmodule_list(void) struct kset *module_kset = __this_module.mkobj.kobj.kset; response_data_t log; - if (module_kset == NULL) return; diff --git a/kerneldriver/cases/memory_corruption/secDetector_memory_corruption.c b/kerneldriver/cases/memory_corruption/secDetector_memory_corruption.c index 7dc3193..b8a7123 100644 --- a/kerneldriver/cases/memory_corruption/secDetector_memory_corruption.c +++ b/kerneldriver/cases/memory_corruption/secDetector_memory_corruption.c @@ -13,7 +13,7 @@ #include "secDetector_mc_kmodule_list.h" -#define TIME_INTERVAL 100 +#define TIME_INTERVAL 10 DEFINE_MUTEX(case_mc_mutex); diff --git a/kerneldriver/core/hook_unit/secDetector_hook.c b/kerneldriver/core/hook_unit/secDetector_hook.c index 20a6c0d..054d901 100644 --- a/kerneldriver/core/hook_unit/secDetector_hook.c +++ b/kerneldriver/core/hook_unit/secDetector_hook.c @@ -100,7 +100,7 @@ static int insert_timer_callback(struct secDetector_workflow *workflow) return -1; list_for_each_entry (timer, &secDetector_timer_list, list) { - if (workflow->interval != timer->interval) { + if (workflow->interval == timer->interval) { list_add_rcu(&workflow->list, &timer->callback_list); return 0; } @@ -124,23 +124,24 @@ static int insert_timer_callback(struct secDetector_workflow *workflow) static int unlink_timer_callback(struct secDetector_workflow *workflow) { - struct secDetector_timer *timer = NULL; + struct secDetector_timer *timer, *temp; if (workflow == NULL) return -1; - list_for_each_entry (timer, &secDetector_timer_list, list) { + list_for_each_entry_safe (timer, temp, &secDetector_timer_list, list) { if (workflow->interval == timer->interval) { list_del_rcu(&workflow->list); synchronize_rcu(); - if (list_empty(&timer->callback_list) == 1) { + if (list_empty(&timer->callback_list)) { del_timer_sync(&timer->timer); list_del_rcu(&timer->list); cancel_work_sync(&timer->work); kfree_rcu(timer, rcu); } - break; + return 1; } } + return 0; } @@ -174,12 +175,13 @@ int delete_callback(struct secDetector_workflow *workflow) if (workflow == NULL) return ret; + ret = 0; for (i = 0; i < ARRAY_SIZE(hook_list_funcs); i++) { list_func = &hook_list_funcs[i]; if (workflow->hook_type >= list_func->type_min && workflow->hook_type <= list_func->type_max) { if (!list_func->exists(workflow)) - return 0; + continue; ret = list_func->delete (workflow); break; } diff --git a/kerneldriver/core/secDetector_manager.c b/kerneldriver/core/secDetector_manager.c index 692222f..1661f92 100644 --- a/kerneldriver/core/secDetector_manager.c +++ b/kerneldriver/core/secDetector_manager.c @@ -45,7 +45,7 @@ void secDetector_module_unregister(struct secDetector_module *module) } ret = delete_callback(wf); if (ret < 0) { - pr_err("[secDetector] delete callback failed\n"); + pr_err("[secDetector] delete callback failed, return %d\n", ret); goto error; } // workflow在被卸载的时候,需要释放analyze status等申请的内存,特别是使用默认的response list。 @@ -136,7 +136,7 @@ int secDetector_module_register(struct secDetector_module *module) ret = insert_callback(wf); if (ret < 0) { - pr_err("[secDetector] insert callback failed\n"); + pr_err("[secDetector] insert callback failed, return %d\n", ret); goto error; } wf->id = callback_id++; diff --git a/kerneldriver/core/secDetector_workflow.c b/kerneldriver/core/secDetector_workflow.c index 2a6fb9d..27b8f8b 100644 --- a/kerneldriver/core/secDetector_workflow.c +++ b/kerneldriver/core/secDetector_workflow.c @@ -33,10 +33,9 @@ void preset_workflow(secDetector_workflow_t *wf) repsonse_id = wf->analyze_func(&collect_data_list, &(wf->analyze_status), &rd); - if (repsonse_id >= 0) { + if (repsonse_id >= 0) wf->response_array[repsonse_id].response_func(&rd); - } - + free_collect_data_list(&collect_data_list); free_response_data_no_rd(repsonse_id, &rd); } \ No newline at end of file -- Gitee