]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
apparmor: replace recursive profile removal with iterative approach
authorMassimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
Tue, 13 Jan 2026 08:09:43 +0000 (09:09 +0100)
committerJohn Johansen <john.johansen@canonical.com>
Mon, 9 Mar 2026 23:05:42 +0000 (16:05 -0700)
commitab09264660f9de5d05d1ef4e225aa447c63a8747
treeba08e540707d5d3fc5a437db8247ecfb357fc646
parente38c55d9f834e5b848bfed0f5c586aaf45acb825
apparmor: replace recursive profile removal with iterative approach

The profile removal code uses recursion when removing nested profiles,
which can lead to kernel stack exhaustion and system crashes.

Reproducer:
  $ pf='a'; for ((i=0; i<1024; i++)); do
      echo -e "profile $pf { \n }" | apparmor_parser -K -a;
      pf="$pf//x";
  done
  $ echo -n a > /sys/kernel/security/apparmor/.remove

Replace the recursive __aa_profile_list_release() approach with an
iterative approach in __remove_profile(). The function repeatedly
finds and removes leaf profiles until the entire subtree is removed,
maintaining the same removal semantic without recursion.

Fixes: c88d4c7b049e ("AppArmor: core policy routines")
Reported-by: Qualys Security Advisory <qsa@qualys.com>
Tested-by: Salvatore Bonaccorso <carnil@debian.org>
Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
Signed-off-by: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
Signed-off-by: John Johansen <john.johansen@canonical.com>
security/apparmor/policy.c