From af4cdebe2cd3feec0ccaf67b53794397c6a80a15 Mon Sep 17 00:00:00 2001 From: zhengchao Date: Thu, 28 Apr 2022 11:32:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug=EF=BC=9A=20IP=20Plugin?= =?UTF-8?q?=E5=92=8CFQDN=20Plugin=E6=9B=B4=E6=96=B0=E6=97=B6=EF=BC=8C=20?= =?UTF-8?q?=E5=85=88=E9=87=8A=E6=94=BE=E4=BA=86=E5=93=88=E5=B8=8C=E8=A1=A8?= =?UTF-8?q?=E7=B4=A2=E5=BC=95=E7=9A=84ex=20data=EF=BC=8C=20=E5=90=8E?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E5=8C=B9=E9=85=8D=E5=BC=95=E6=93=8E=E9=87=8D?= =?UTF-8?q?=E5=BB=BA=EF=BC=8C=E5=AF=BC=E8=87=B4=E5=8C=B9=E9=85=8D=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E4=BB=8E=E6=97=A7=E7=9A=84=E5=8C=B9=E9=85=8D=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E4=B8=AD=E8=AE=BF=E9=97=AE=E5=88=B0=E5=B7=B2=E9=87=8A?= =?UTF-8?q?=E6=94=BE=E7=9A=84=E7=BB=93=E6=9E=84=E4=BD=93=EF=BC=8C=E9=80=A0?= =?UTF-8?q?=E6=88=90Segmentation=20fault=20TSG-10486?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entry/Maat_ex_data.cpp | 26 +++++++++++++++----------- src/entry/Maat_rule.cpp | 2 +- src/entry/Maat_table_runtime.cpp | 9 ++++----- src/inc_internal/Maat_ex_data.h | 2 +- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/entry/Maat_ex_data.cpp b/src/entry/Maat_ex_data.cpp index 6f6dded..954209c 100644 --- a/src/entry/Maat_ex_data.cpp +++ b/src/entry/Maat_ex_data.cpp @@ -346,22 +346,16 @@ MAAT_RULE_EX_DATA EX_data_rt_get_EX_data_by_container(struct EX_data_rt* ex_rt, return dupped_ex_data; } -size_t EX_data_rt_list_all_ex_container(struct EX_data_rt* ex_rt, struct EX_data_container*** ex_container_array) +size_t EX_data_rt_list_updating_ex_containers(struct EX_data_rt* ex_rt, struct EX_data_container*** ex_container_array) { size_t ex_data_cnt=0, i=0; struct EX_data_container* ex_container=NULL, *tmp=NULL; - assert(ex_rt->is_updating==0); - if(ex_rt->effective_hash=='a') + if(!ex_rt->ex_schema) { - ex_data_cnt=HASH_CNT(hh_a, ex_rt->hash_key2ex_a); - *ex_container_array=ALLOC(struct EX_data_container*, ex_data_cnt); - HASH_ITER(hh_a, ex_rt->hash_key2ex_a, ex_container, tmp) - { - (*ex_container_array)[i]=ex_container; - i++; - } + return 0; } - else + assert(ex_rt->is_updating==1); + if(ex_rt->effective_hash=='a') { ex_data_cnt=HASH_CNT(hh_b, ex_rt->hash_key2ex_b); *ex_container_array=ALLOC(struct EX_data_container*, ex_data_cnt); @@ -371,6 +365,16 @@ size_t EX_data_rt_list_all_ex_container(struct EX_data_rt* ex_rt, struct EX_data i++; } } + else + { + ex_data_cnt=HASH_CNT(hh_a, ex_rt->hash_key2ex_a); + *ex_container_array=ALLOC(struct EX_data_container*, ex_data_cnt); + HASH_ITER(hh_a, ex_rt->hash_key2ex_a, ex_container, tmp) + { + (*ex_container_array)[i]=ex_container; + i++; + } + } return ex_data_cnt; } void* EX_data_container_get_user_data(struct EX_data_container* ex_container) diff --git a/src/entry/Maat_rule.cpp b/src/entry/Maat_rule.cpp index 833a3f2..bf01aa3 100644 --- a/src/entry/Maat_rule.cpp +++ b/src/entry/Maat_rule.cpp @@ -57,7 +57,7 @@ extern "C" } #endif -int MAAT_FRAME_VERSION_3_6_6_20220427=1; +int MAAT_FRAME_VERSION_3_6_7_20220428=1; int is_valid_table_name(const char* str) { diff --git a/src/entry/Maat_table_runtime.cpp b/src/entry/Maat_table_runtime.cpp index 657a886..bade9d8 100644 --- a/src/entry/Maat_table_runtime.cpp +++ b/src/entry/Maat_table_runtime.cpp @@ -491,8 +491,7 @@ int Maat_table_runtime_fqdn_plugin_rebuild_fqdn_engine(struct Maat_table_runtime { return ret; } - EX_data_rt_update_commit(fqdn_rt->ex_data_rt); - rule_cnt=EX_data_rt_list_all_ex_container(fqdn_rt->ex_data_rt, &exc_array); + rule_cnt=EX_data_rt_list_updating_ex_containers(fqdn_rt->ex_data_rt, &exc_array); rules=ALLOC(struct FQDN_rule, rule_cnt); for(i=0; ifqdn_engine; fqdn_rt->fqdn_engine=new_fqdn_engine; Maat_garbage_bagging(table_rt->ref_garbage_bin, old_fqdn_engine, (void (*)(void*))FQDN_engine_free); + EX_data_rt_update_commit(fqdn_rt->ex_data_rt); free(rules); free(exc_array); @@ -634,8 +634,7 @@ int Maat_table_runtime_ip_plugin_rebuild_ip_matcher(struct Maat_table_runtime* t { return ret; } - EX_data_rt_update_commit(ip_plugin->ex_data_rt); - rule_cnt=EX_data_rt_list_all_ex_container(ip_plugin->ex_data_rt, &exc_array); + rule_cnt=EX_data_rt_list_updating_ex_containers(ip_plugin->ex_data_rt, &exc_array); rules=ALLOC(struct ip_rule, rule_cnt); for(i=0; iip_matcher; ip_plugin->ip_matcher=new_ip_matcher; Maat_garbage_bagging(table_rt->ref_garbage_bin, old_ip_matcher, (void (*)(void*))ip_matcher_free); - + EX_data_rt_update_commit(ip_plugin->ex_data_rt); free(rules); free(exc_array); diff --git a/src/inc_internal/Maat_ex_data.h b/src/inc_internal/Maat_ex_data.h index b06d848..a3369e0 100644 --- a/src/inc_internal/Maat_ex_data.h +++ b/src/inc_internal/Maat_ex_data.h @@ -23,7 +23,7 @@ int EX_data_rt_row2EX_data(struct EX_data_rt* ex_rt, int EX_data_rt_delete_by_row(struct EX_data_rt* ex_rt, const char* row, const char* key, size_t key_len, void *logger); MAAT_RULE_EX_DATA EX_data_rt_get_EX_data_by_key(struct EX_data_rt* ex_rt, const char* key, size_t key_len); MAAT_RULE_EX_DATA EX_data_rt_get_EX_data_by_container(struct EX_data_rt* ex_rt, struct EX_data_container* container); -size_t EX_data_rt_list_all_ex_container(struct EX_data_rt* ex_rt, struct EX_data_container*** ex_container_array); +size_t EX_data_rt_list_updating_ex_containers(struct EX_data_rt* ex_rt, struct EX_data_container*** ex_container_array); void* EX_data_container_get_user_data(struct EX_data_container* ex_container); size_t EX_data_rt_get_ex_container_count(struct EX_data_rt* ex_rt);