This will be needed for introducing condref variants into
policy.c:update_to_newest_parent.

Signed-off-by: Ryan Lee <[email protected]>
---
 security/apparmor/include/policy.h | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/security/apparmor/include/policy.h 
b/security/apparmor/include/policy.h
index 240b2eba7687..2b210fc0dd9e 100644
--- a/security/apparmor/include/policy.h
+++ b/security/apparmor/include/policy.h
@@ -324,6 +324,19 @@ static inline struct aa_profile 
*aa_get_newest_profile(struct aa_profile *p)
 {
        return labels_profile(aa_get_newest_label(&p->label));
 }
+/**
+ * aa_get_newest_profile_condref - simple wrapper fn to wrap the label version
+ * @p: profile (NOT NULL)
+ * @needput: returns whether the reference needs put
+ *
+ * Returns refcount to newest version of the profile (maybe @p)
+ *
+ * Requires: @p must be held with a valid refcount
+ */
+static inline struct aa_profile *aa_get_newest_profile_condref(struct 
aa_profile *p, bool *needput)
+{
+       return labels_profile(aa_get_newest_label_condref(&p->label, needput));
+}
 
 static inline aa_state_t RULE_MEDIATES(struct aa_ruleset *rules,
                                       unsigned char class)
@@ -428,6 +441,16 @@ static inline void aa_put_profile(struct aa_profile *p)
        if (p)
                kref_put(&p->label.count.count, aa_label_kref);
 }
+/**
+ * aa_put_profile_condref - conditionally decrement refcount on profile @p
+ * @p: profile  (MAYBE NULL)
+ * @needput: whether to put the profile
+ */
+static inline void aa_put_profile_condref(struct aa_profile *p, bool needput)
+{
+       if (unlikely(needput))
+               aa_put_profile(p);
+}
 
 static inline int AUDIT_MODE(struct aa_profile *profile)
 {
-- 
2.43.0


Reply via email to