diff --git a/kerneldriver/cases/memory_corruption/secDetector_mc_kmodule_list.c b/kerneldriver/cases/memory_corruption/secDetector_mc_kmodule_list.c index 722a96cd7263bcc65c56782cadd97ad74505cc61..283590bf68db7918b293075d572464bc7d9a921e 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 7dc31935a73ac724200c2f9a87c20dbd2834c02b..b8a71231523184dd58e7c7a0ede7b30f99349bee 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 20a6c0db3b47acf609ab677c1a39b8054ade53fb..054d90101d0955f72fa6a5e8fd901cf1ff1f93a5 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 692222f33c7dbacd10f64e3aa58ab854bd2bd46d..1661f929cb8f0b5871d4abcaa6302495a7b4f39d 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 2a6fb9d14f76adabd9e564510e8406c298c62244..27b8f8bdb6fcdb19bbafe515e2234b8dac1d619c 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