diff --git a/tests/engine/test_filter_warning_resolver.cpp b/tests/engine/test_filter_warning_resolver.cpp index 2d6026ca..224bf098 100644 --- a/tests/engine/test_filter_warning_resolver.cpp +++ b/tests/engine/test_filter_warning_resolver.cpp @@ -28,17 +28,19 @@ static bool warns(const std::string& condition) TEST_CASE("Should spot warnings in filtering conditions", "[rule_loader]") { - SECTION("for unsafe usage of ") + SECTION("for unsafe usage of in k8s audit fields") { - REQUIRE(false == warns("sample.field exists")); - REQUIRE(true == warns("sample.field = ")); - REQUIRE(true == warns("sample.field == ")); - REQUIRE(true == warns("sample.field != ")); - REQUIRE(true == warns("sample.field in ()")); - REQUIRE(true == warns("sample.field in (otherval, )")); - REQUIRE(true == warns("sample.field intersects ()")); - REQUIRE(true == warns("sample.field intersects (otherval, )")); - REQUIRE(true == warns("sample.field pmatch ()")); - REQUIRE(true == warns("sample.field pmatch (otherval, )")); + REQUIRE(false == warns("ka.field exists")); + REQUIRE(false == warns("some.field = ")); + REQUIRE(true == warns("jevt.field = ")); + REQUIRE(true == warns("ka.field = ")); + REQUIRE(true == warns("ka.field == ")); + REQUIRE(true == warns("ka.field != ")); + REQUIRE(true == warns("ka.field in ()")); + REQUIRE(true == warns("ka.field in (otherval, )")); + REQUIRE(true == warns("ka.field intersects ()")); + REQUIRE(true == warns("ka.field intersects (otherval, )")); + REQUIRE(true == warns("ka.field pmatch ()")); + REQUIRE(true == warns("ka.field pmatch (otherval, )")); } } diff --git a/userspace/engine/filter_warning_resolver.cpp b/userspace/engine/filter_warning_resolver.cpp index c1e005b3..dbece71f 100644 --- a/userspace/engine/filter_warning_resolver.cpp +++ b/userspace/engine/filter_warning_resolver.cpp @@ -20,6 +20,12 @@ limitations under the License. static const char* no_value = ""; static const char* warn_unsafe_na_check = "unsafe-na-check"; +static inline bool is_unsafe_field(const string& f) +{ + return !strncmp(f.c_str(), "ka.", strlen("ka.")) + || !strncmp(f.c_str(), "jevt.", strlen("jevt.")); +} + static inline bool is_equality_operator(const string& op) { return op == "==" || op == "=" || op == "!=" @@ -57,7 +63,7 @@ bool filter_warning_resolver::format( void filter_warning_resolver::visitor::visit( libsinsp::filter::ast::binary_check_expr* e) { - if (is_equality_operator(e->op)) + if (is_unsafe_field(e->field) && is_equality_operator(e->op)) { m_is_equality_check = true; e->value->accept(this);