]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
apparmor: fix: limit the number of levels of policy namespaces
authorJohn Johansen <john.johansen@canonical.com>
Mon, 13 Apr 2026 06:39:13 +0000 (23:39 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 18 Apr 2026 08:35:56 +0000 (10:35 +0200)
commit 306039414932c80f8420695a24d4fe10c84ccfb2 upstream.

Currently the number of policy namespaces is not bounded relying on
the user namespace limit. However policy namespaces aren't strictly
tied to user namespaces and it is possible to create them and nest
them arbitrarily deep which can be used to exhaust system resource.

Hard cap policy namespaces to the same depth as user namespaces.

Fixes: c88d4c7b049e8 ("AppArmor: core policy routines")
Reported-by: Qualys Security Advisory <qsa@qualys.com>
Reviewed-by: Ryan Lee <ryan.lee@canonical.com>
Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
Signed-off-by: John Johansen <john.johansen@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
security/apparmor/include/policy_ns.h
security/apparmor/policy_ns.c

index 33d665516fc11687142d78e98a0b99001520d88f..dabb69bc87e00acf73d08dbd6d0ef15599a6a185 100644 (file)
@@ -18,6 +18,8 @@
 #include "label.h"
 #include "policy.h"
 
+/* Match max depth of user namespaces */
+#define MAX_NS_DEPTH 32
 
 /* struct aa_ns_acct - accounting of profiles in namespace
  * @max_size: maximum space allowed for all profiles in namespace
index 78700d94b453384c44bc17e7ac20d1c20969aac9..b7d9d5376aace7f116c474cf40b07cc11bafd5c0 100644 (file)
@@ -262,6 +262,8 @@ static struct aa_ns *__aa_create_ns(struct aa_ns *parent, const char *name,
        AA_BUG(!name);
        AA_BUG(!mutex_is_locked(&parent->lock));
 
+       if (parent->level > MAX_NS_DEPTH)
+               return ERR_PTR(-ENOSPC);
        ns = alloc_ns(parent->base.hname, name);
        if (!ns)
                return ERR_PTR(-ENOMEM);