diff --git a/parser/libapparmor_re/expr-tree.h b/parser/libapparmor_re/expr-tree.h index b59ea8ebf..995c51ecf 100644 --- a/parser/libapparmor_re/expr-tree.h +++ b/parser/libapparmor_re/expr-tree.h @@ -245,6 +245,7 @@ ostream &operator<<(ostream &os, Node &node); #define NODE_TYPE_MATCHFLAG (1 << 18) #define NODE_TYPE_EXACTMATCHFLAG (1 << 19) #define NODE_TYPE_DENYMATCHFLAG (1 << 20) +#define NODE_TYPE_PROMPTMATCHFLAG (1 << 21) /* An abstract node in the syntax tree. */ class Node { @@ -915,7 +916,10 @@ public: class PromptMatchFlag: public MatchFlag { public: - PromptMatchFlag(int priority, perm32_t prompt, perm32_t audit): MatchFlag(priority, prompt, audit) {} + PromptMatchFlag(int priority, perm32_t prompt, perm32_t audit): MatchFlag(priority, prompt, audit) + { + type_flags |= NODE_TYPE_PROMPTMATCHFLAG; + } }; diff --git a/parser/libapparmor_re/hfa.cc b/parser/libapparmor_re/hfa.cc index 827d225cf..da7230914 100644 --- a/parser/libapparmor_re/hfa.cc +++ b/parser/libapparmor_re/hfa.cc @@ -1433,7 +1433,7 @@ int accept_perms(NodeVec *state, perms_t &perms, bool filedfa) } else if (match->is_type(NODE_TYPE_DENYMATCHFLAG)) { perms.deny |= match->perms; perms.quiet |= match->audit; - } else if (dynamic_cast(match)) { + } else if (match->is_type(NODE_TYPE_PROMPTMATCHFLAG)) { perms.prompt |= match->perms; perms.audit |= match->audit; } else {