region_rule_inner中增加magic_num,以诊断region配置删除时可能发生的野指针访问;同时hierarchy增加对region_id查找的判空,以避免在一个region扫描命中后,hierarchy中该region又被删除,产生的空指针访问。

This commit is contained in:
zhengchao
2020-07-06 16:46:41 +08:00
parent 639feb17b0
commit 41b3628b53
4 changed files with 13 additions and 2 deletions

View File

@@ -235,6 +235,7 @@ int region_compile(_Maat_feather_t*feather, struct Maat_hierarchy_compile_mid* c
for(i=0; (size_t)i<region_hit_num;i++)
{
region=*(struct Maat_region_inner**)((char*)region_hit+region_type_size*i+user_data_offset);
assert(region->magic_num==REGION_RULE_MAGIC);
if(region_hit_wraper->virtual_table_ids)
{
virtual_table_id=region_hit_wraper->virtual_table_ids[i];

View File

@@ -1052,6 +1052,12 @@ void Maat_hierarchy_compile_mid_udpate(struct Maat_hierarchy_compile_mid* mid, i
mid->this_scan_region_hit_cnt++;
pthread_rwlock_rdlock(&hier->rwlock);
HASH_FIND_INT(hier->hash_region_by_id, &region_id, region);
if(!region)
{
pthread_rwlock_unlock(&hier->rwlock);
return;
}
group=region->ref_parent_group;
if(group->top_group_cnt==0)

View File

@@ -34,7 +34,7 @@
#include "stream_fuzzy_hash.h"
#include "gram_index_engine.h"
int MAAT_FRAME_VERSION_3_0_20200703=1;
int MAAT_FRAME_VERSION_3_0_20200706=1;
int is_valid_table_name(const char* str)
{
@@ -715,6 +715,8 @@ void op_expr_add_rule(struct op_expr_t* op_expr,scan_rule_t* p_rule)
}
void Maat_region_inner_free(struct Maat_region_inner* region)
{
assert(region->magic_num==REGION_RULE_MAGIC);
region->magic_num=0;
free(region);
}
@@ -1031,6 +1033,7 @@ int get_district_id(Maat_scanner *scanner,const char* district_str)
struct Maat_region_inner* Maat_region_inner_new(int group_id, int region_id, int table_id, int district_id)
{
struct Maat_region_inner* region=ALLOC(struct Maat_region_inner, 1);
region->magic_num=REGION_RULE_MAGIC;
region->region_id=region_id;
region->group_id=group_id;
region->table_id=table_id;

View File

@@ -136,9 +136,10 @@ struct op_expr_t
int table_id;
int rule_type;
};
#define REGION_RULE_MAGIC 0x4d3c2b1a
struct Maat_region_inner
{
long long magic_num;
int region_id;
int group_id;
int district_id;