summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliuwentan <[email protected]>2022-12-27 18:12:05 +0800
committerliuwentan <[email protected]>2022-12-27 18:12:05 +0800
commit9c4741d0c189278ea5c98406f8769e5d3a09f96f (patch)
tree43e201bda1819b81c42196b0a26dc2bcf58c69a5
parentaf3058e9eb9c015c8cb829f26a91c6afa3fe1a61 (diff)
fix flagScan multiHit bugv3.6.19
-rw-r--r--src/entry/Maat_api.cpp10
-rw-r--r--src/entry/flag_matcher.cpp5
-rw-r--r--test/maat_json.json23
-rw-r--r--test/test_maatframe.cpp29
4 files changed, 55 insertions, 12 deletions
diff --git a/src/entry/Maat_api.cpp b/src/entry/Maat_api.cpp
index 50747c8..bdf8e2b 100644
--- a/src/entry/Maat_api.cpp
+++ b/src/entry/Maat_api.cpp
@@ -219,9 +219,10 @@ void scan_region_hit_wraper_build_with_GIE(struct scan_region_hit_wraper* wraper
wraper->virtual_table_ids=NULL;
for(i=0; i< n_rslt; i++)
{
- wraper->wrapped_regions[wraper->n_wrapped_region]=(struct Maat_region_inner*)(GIE_rslt[i].tag);
+ wraper->wrapped_regions[wraper->n_wrapped_region]=(struct Maat_region_inner*)(GIE_rslt[i].tag);
+ wraper->n_wrapped_region++;
}
- wraper->n_wrapped_region=n_rslt;
+
wraper->is_last_region=is_last_region;
wraper->virtual_table_id=virtual_table_id;
wraper->Nth_scan=Nth_scan;
@@ -237,9 +238,10 @@ void scan_region_hit_wraper_build_with_flag_matcher(struct scan_region_hit_wrape
wraper->virtual_table_ids=NULL;
for(i=0; i< n_rslt; i++)
{
- wraper->wrapped_regions[wraper->n_wrapped_region]=(struct Maat_region_inner*)(flag_rslt[i].user_tag);
+ wraper->wrapped_regions[wraper->n_wrapped_region]=(struct Maat_region_inner*)(flag_rslt[i].user_tag);
+ wraper->n_wrapped_region++;
}
- wraper->n_wrapped_region=n_rslt;
+
wraper->is_last_region=is_last_region;
wraper->virtual_table_id=virtual_table_id;
wraper->Nth_scan=Nth_scan;
diff --git a/src/entry/flag_matcher.cpp b/src/entry/flag_matcher.cpp
index b229a12..1c9577b 100644
--- a/src/entry/flag_matcher.cpp
+++ b/src/entry/flag_matcher.cpp
@@ -14,13 +14,11 @@ struct flag_matcher *flag_matcher_new(struct flag_rule *rule, uint32_t n_rule)
{
if (!rule)
{
- fprintf(stderr, "Invalid argument: struct flag_rule *rule\n");
return NULL;
}
if (!n_rule)
{
- fprintf(stderr, "Invalid argument: uint32_t n_rule\n");
return NULL;
}
@@ -41,7 +39,6 @@ void flag_matcher_free(struct flag_matcher *flag_matcher)
{
if (!flag_matcher)
{
- fprintf(stderr, "Invalid argument: struct flag_matcher *flag_matcher\n");
return;
}
@@ -55,7 +52,6 @@ int flag_matcher_match(struct flag_matcher *flag_matcher, uint64_t flag, struct
{
if (!flag_matcher)
{
- fprintf(stderr, "Invalid argument: struct flag_matcher *flag_matcher\n");
return -1;
}
@@ -70,7 +66,6 @@ int flag_matcher_match(struct flag_matcher *flag_matcher, uint64_t flag, struct
result_number++;
if (result_number == n_result)
{
- fprintf(stderr, "result array is full\n");
return result_number;
}
}
diff --git a/test/maat_json.json b/test/maat_json.json
index 1b26da0..71e0c4b 100644
--- a/test/maat_json.json
+++ b/test/maat_json.json
@@ -2404,6 +2404,29 @@
]
}
]
+ },
+ {
+ "compile_id": 194,
+ "service": 0,
+ "action": 0,
+ "do_blacklist": 0,
+ "do_log": 0,
+ "user_region": "anything",
+ "is_valid": "yes",
+ "groups": [
+ {
+ "regions": [
+ {
+ "table_type": "flag",
+ "table_name": "FLAG_CONFIG",
+ "table_content": {
+ "flag": 21,
+ "flag_mask": 31
+ }
+ }
+ ]
+ }
+ ]
}
],
"plugin_table": [
diff --git a/test/test_maatframe.cpp b/test/test_maatframe.cpp
index fb4d3ab..27a631a 100644
--- a/test/test_maatframe.cpp
+++ b/test/test_maatframe.cpp
@@ -159,14 +159,14 @@ TEST(FlagScan, basic)
ASSERT_GT(table_id, 0);
//compile_id:192 flag: 0000 0001 mask: 0000 0011
- //scan_data: 0000 0001 or 0000 0101 should hit
- uint64_t scan_data=1;
+ //scan_data: 0000 1001 or 0000 1101 should hit
+ uint64_t scan_data=9;
ret=Maat_scan_flag(g_feather, table_id, scan_data, result, 4, &mid, 0);
EXPECT_EQ(ret, 1);
EXPECT_EQ(result[0].config_id, 192);
Maat_clean_status(&mid);
- scan_data=5;
+ scan_data=13;
ret=Maat_scan_flag(g_feather, table_id, scan_data, result, 4, &mid, 0);
EXPECT_EQ(ret, 1);
EXPECT_EQ(result[0].config_id, 192);
@@ -208,6 +208,29 @@ TEST(FlagScan, withExprRegion)
Maat_clean_status(&mid);
}
+TEST(FlagScan, hitMultiCompile)
+{
+ int ret=0;
+ int flag_table_id=0;
+ struct Maat_rule_t result[4];
+ int found_pos[4];
+ const char* flag_table_name="FLAG_CONFIG";
+ scan_status_t mid=NULL;
+
+ flag_table_id=Maat_table_register(g_feather,flag_table_name);
+ ASSERT_GT(flag_table_id, 0);
+
+ //compile_id:192 flag: 0000 0001 mask: 0000 0011
+ //compile_id:194 flag: 0001 0101 mask: 0001 1111
+ //scan_data: 0001 0101 should hit compile192 and compile194
+ uint64_t flag_scan_data=21;
+ ret=Maat_scan_flag(g_feather, flag_table_id, flag_scan_data, result, 4, &mid, 0);
+ EXPECT_EQ(ret, 2);
+ EXPECT_EQ(result[0].config_id, 194);
+ EXPECT_EQ(result[1].config_id, 192);
+ Maat_clean_status(&mid);
+}
+
TEST_F(JSONUpdate, OldCfg)
{
scan_with_old_or_new_cfg(JSONUpdate::_shared_feather_j, 1);