Switch unconfined and in-tree labels to percpu managed
mode of percpu rcuref. This helps avoid memory contention
in ref get and put operations.

Signed-off-by: Neeraj Upadhyay <neeraj.upadh...@amd.com>
---
 security/apparmor/label.c     | 1 +
 security/apparmor/policy_ns.c | 2 ++
 2 files changed, 3 insertions(+)

diff --git a/security/apparmor/label.c b/security/apparmor/label.c
index f28dec1c3e70..57fcd5b3e48a 100644
--- a/security/apparmor/label.c
+++ b/security/apparmor/label.c
@@ -710,6 +710,7 @@ static struct aa_label *__label_insert(struct aa_labelset 
*ls,
        rb_link_node(&label->node, parent, new);
        rb_insert_color(&label->node, &ls->root);
        label->flags |= FLAG_IN_TREE;
+       percpu_rcuref_manage(&label->count);
 
        return aa_get_label(label);
 }
diff --git a/security/apparmor/policy_ns.c b/security/apparmor/policy_ns.c
index 1f02cfe1d974..ff261b119c53 100644
--- a/security/apparmor/policy_ns.c
+++ b/security/apparmor/policy_ns.c
@@ -124,6 +124,7 @@ static struct aa_ns *alloc_ns(const char *prefix, const 
char *name)
                goto fail_unconfined;
        /* ns and ns->unconfined share ns->unconfined refcount */
        ns->unconfined->ns = ns;
+       percpu_rcuref_manage(&ns->unconfined->label.count);
 
        atomic_set(&ns->uniq_null, 0);
 
@@ -377,6 +378,7 @@ int __init aa_alloc_root_ns(void)
        }
        kernel_t = &kernel_p->label;
        root_ns->unconfined->ns = aa_get_ns(root_ns);
+       percpu_rcuref_manage(&root_ns->unconfined->label.count);
 
        return 0;
 }
-- 
2.34.1


Reply via email to