diff --git a/kerneldriver/cases/file_block/secDetector_file_block.c b/kerneldriver/cases/file_block/secDetector_file_block.c index 7e0963d129df2689bf658bac36acebe5e6812412..b4972ee75fa34af852c3f1c3cf4ad64012c65d8d 100644 --- a/kerneldriver/cases/file_block/secDetector_file_block.c +++ b/kerneldriver/cases/file_block/secDetector_file_block.c @@ -35,7 +35,7 @@ static int file_write_check(struct secDetector_workflow *wf, struct file *file) char *pathname = NULL; response_data_t log; bool matched = false; - struct file_block_rules_item *item; + struct file_block_rules_item *item = NULL; int ret = 0; buf = kzalloc(BUF_SIZE, GFP_ATOMIC); @@ -87,7 +87,7 @@ static struct secDetector_workflow workflow_array[] = { static int proc_show(struct seq_file *m, void *v) { - struct file_block_rules_item *item; + struct file_block_rules_item *item = NULL; mutex_lock(&rules_mutex); list_for_each_entry (item, &file_block_rule_list, list) { @@ -104,8 +104,8 @@ static int proc_open(struct inode *inode, struct file *file) static void clear_file_rule_list(void) { - struct file_block_rules_item *item; - struct file_block_rules_item *tmp; + struct file_block_rules_item *item = NULL; + struct file_block_rules_item *tmp = NULL; mutex_lock(&rules_mutex); list_for_each_entry_safe (item, tmp, &file_block_rule_list, list) { @@ -121,10 +121,10 @@ static void clear_file_rule_list(void) static ssize_t proc_write(struct file *file, const char __user *buffer, size_t len, loff_t *offset) { - char *data; - char *str; - char *rule; - struct file_block_rules_item *item; + char *data = NULL; + char *str = NULL; + char *rule = NULL; + struct file_block_rules_item *item = NULL; ssize_t r = -EINVAL; data = memdup_user_nul(buffer, len); diff --git a/kerneldriver/cases/kmodule_baseline/secDetector_kmodule_baseline.c b/kerneldriver/cases/kmodule_baseline/secDetector_kmodule_baseline.c index 85411c0f6972bc22d05df9611912a0830782f836..4f59c146960b01a1ff9f6addda1735575b084df9 100644 --- a/kerneldriver/cases/kmodule_baseline/secDetector_kmodule_baseline.c +++ b/kerneldriver/cases/kmodule_baseline/secDetector_kmodule_baseline.c @@ -17,7 +17,10 @@ DEFINE_MUTEX(case_kmodule_mutex); static void check_watching_kmodule(void) { - mutex_lock(&case_kmodule_mutex); + if (mutex_trylock(&case_kmodule_mutex) == 0) { + pr_warn("[secDetector case kmodule baseline] check cann't getlock, ret\n"); + return; + } check_kmodule_baseline(); mutex_unlock(&case_kmodule_mutex); } diff --git a/kerneldriver/cases/kmodule_baseline/secDetector_mc_kmodule_baseline.c b/kerneldriver/cases/kmodule_baseline/secDetector_mc_kmodule_baseline.c index cff1ff532a4d585322c94dbf2df0e0fd482babf1..9a051ca2a100733b2f47d1af9485c130edc5b4b3 100644 --- a/kerneldriver/cases/kmodule_baseline/secDetector_mc_kmodule_baseline.c +++ b/kerneldriver/cases/kmodule_baseline/secDetector_mc_kmodule_baseline.c @@ -43,7 +43,7 @@ static int add_kmodule_baseline_name(const char *name) return -1; } - name_len = strlen(name) < NAME_LEN ? strlen(name) : NAME_LEN; + name_len = strlen(name) < NAME_LEN ? strlen(name) : NAME_LEN - 1; memcpy(module->module_name, name, name_len); list_add(&module->list, &chkrkatt_module_list); return 0; @@ -86,7 +86,7 @@ static void report_kmodule_baseline(void) list_for_each_entry_safe(get_module_name, get_module_name_next, &chkrkatt_module_list, list) { if (get_module_name != NULL && get_module_name_next != NULL) { /* 2: ', ' */ - if(sizeof(module_name_all) + sizeof(get_module_name->module_name) < NAME_LEN - 2 - header_msg_len) { + if(strlen(module_name_all) + strlen(get_module_name->module_name) < NAME_LEN - 2 - header_msg_len) { strcat(module_name_all, get_module_name->module_name); strcat(module_name_all, strtmp); } diff --git a/kerneldriver/cases/task_block/secDetector_task_block.c b/kerneldriver/cases/task_block/secDetector_task_block.c index 94859e44437c69fbdd050e9fc3cc7c52cadb51ae..a46c5f5b61febc4b62f9d76b35c5536e2126e39b 100644 --- a/kerneldriver/cases/task_block/secDetector_task_block.c +++ b/kerneldriver/cases/task_block/secDetector_task_block.c @@ -37,7 +37,7 @@ static int task_bprm_check(struct secDetector_workflow *wf, char *pathname = NULL; response_data_t log; bool matched = false; - struct task_block_rules_item *item; + struct task_block_rules_item *item = NULL; int ret = 0; buf = kzalloc(BUF_SIZE, GFP_ATOMIC); @@ -88,7 +88,7 @@ static struct secDetector_workflow workflow_array[] = { static int proc_show(struct seq_file *m, void *v) { - struct task_block_rules_item *item; + struct task_block_rules_item *item = NULL; mutex_lock(&rules_mutex); list_for_each_entry (item, &task_block_rule_list, list) { @@ -105,8 +105,8 @@ static int proc_open(struct inode *inode, struct file *file) static void clear_task_rule_list(void) { - struct task_block_rules_item *item; - struct task_block_rules_item *tmp; + struct task_block_rules_item *item = NULL; + struct task_block_rules_item *tmp = NULL; mutex_lock(&rules_mutex); list_for_each_entry_safe (item, tmp, &task_block_rule_list, list) { @@ -122,10 +122,10 @@ static void clear_task_rule_list(void) static ssize_t proc_write(struct file *file, const char __user *buffer, size_t len, loff_t *offset) { - char *data; - char *str; - char *rule; - struct task_block_rules_item *item; + char *data = NULL; + char *str = NULL; + char *rule = NULL; + struct task_block_rules_item *item = NULL; ssize_t r = -EINVAL; data = memdup_user_nul(buffer, len); diff --git a/kerneldriver/core/analyze_unit/secDetector_analyze.c b/kerneldriver/core/analyze_unit/secDetector_analyze.c index 226e24539dd8838220ce5291aec34dee53c1fd60..f345412a3107e93b416b0ec88f9799797a4f2762 100644 --- a/kerneldriver/core/analyze_unit/secDetector_analyze.c +++ b/kerneldriver/core/analyze_unit/secDetector_analyze.c @@ -33,7 +33,7 @@ int get_timestamp_str(char **ret_str) { struct timespec64 ts; struct tm stm; - char *stm_str; + char *stm_str = NULL; int stm_str_len = 0; ktime_get_real_ts64(&ts); @@ -65,4 +65,4 @@ int get_timestamp_str(char **ret_str) kfree(stm_str); return stm_str_len; } -EXPORT_SYMBOL_GPL(get_timestamp_str); \ No newline at end of file +EXPORT_SYMBOL_GPL(get_timestamp_str); diff --git a/kerneldriver/core/secDetector_manager.c b/kerneldriver/core/secDetector_manager.c index 4c8838627e15257e99e13271febd88fa78d7c787..07b45d82b04f4713374073f4d13201dc52f47886 100644 --- a/kerneldriver/core/secDetector_manager.c +++ b/kerneldriver/core/secDetector_manager.c @@ -115,13 +115,15 @@ int secDetector_module_register(struct secDetector_module *module) int i; int module_id; unsigned int callback_id = 0; - struct secDetector_parameter *param = module->parameter; + struct secDetector_parameter *param = NULL; if (module == NULL) { pr_err("[secDetector] register module is null\n"); return -EINVAL; } + param = module->parameter; + module_id = idr_alloc(&g_module_idr, module, 0, INT_MAX, GFP_KERNEL); if (module_id < 0) { pr_err("[secDetector] alloc module id failed\n"); diff --git a/lib/secDetector_sdk.cpp b/lib/secDetector_sdk.cpp index 6b00953822f1a8c2fcc73c8ab9d6437fca7441f0..a431377580e76940bb474594fc9d4b4f260c4afd 100644 --- a/lib/secDetector_sdk.cpp +++ b/lib/secDetector_sdk.cpp @@ -34,7 +34,7 @@ extern "C" { void *secSub(const int topic) { - PubSubClient *cur_client; + PubSubClient *cur_client = nullptr; if (topic <= 0 || topic > ALLTOPIC) { printf("lib secSub failed, topic:%d is error\n", topic); return NULL; @@ -64,7 +64,7 @@ void *secSub(const int topic) void secUnsub(void *reader) { - PubSubClient *cur_client; + PubSubClient *cur_client = nullptr; if (!reader) return; @@ -84,7 +84,7 @@ void secUnsub(void *reader) void secReadFrom(void *reader, char *data, int data_len) { string msg(""); - PubSubClient *cur_client; + PubSubClient *cur_client = nullptr; if (!data || data_len <= 1) return