From 9221d291ec2441d3dc6098916a9f9b19df820bf0 Mon Sep 17 00:00:00 2001 From: John Johansen Date: Tue, 24 Dec 2024 02:37:39 -0800 Subject: [PATCH] parser: stop using dynamic_cast for prompt permission calculations Like was done for the other MatchFlags switch to using a node type instead of dynamic_cast as this will result in a performance improvement. Signed-off-by: John Johansen --- parser/libapparmor_re/expr-tree.h | 6 +++++- parser/libapparmor_re/hfa.cc | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) 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 2a89ab9ad..65ace5c75 100644 --- a/parser/libapparmor_re/hfa.cc +++ b/parser/libapparmor_re/hfa.cc @@ -1440,7 +1440,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 {