Blob Blame History Raw
From 3ddae9876a7045a8d08ab372eff232a5da5199b8 Mon Sep 17 00:00:00 2001
From: John Johansen <john.johansen@canonical.com>
Date: Fri, 13 Apr 2018 22:33:10 -0700
Subject: [PATCH] apparmor: fix memory leak when deduping profile load
Git-commit: 3ddae9876a7045a8d08ab372eff232a5da5199b8
Patch-mainline: v4.18-rc1
References: bsc#1051510

AppArmor is leaking the newly loaded profile and its proxy when
the profile is an exact match to the currently loaded version.

In this case the dedup check results in the profile being skipped and
put without dealing with the proxy ref thus not breaking a circular
refcount and causing a leak.

Buglink: http://bugs.launchpad.net/bugs/1750594
Fixes: 5d5182cae401 ("apparmor: move to per loaddata files, instead of replicating in profiles")
Signed-off-by: John Johansen <john.johansen@canonical.com>
Acked-by: Takashi Iwai <tiwai@suse.de>

---
 security/apparmor/policy.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/security/apparmor/policy.c b/security/apparmor/policy.c
index b367fef33d03..1590e2de4e84 100644
--- a/security/apparmor/policy.c
+++ b/security/apparmor/policy.c
@@ -1008,6 +1008,9 @@ ssize_t aa_replace_profiles(struct aa_ns *policy_ns, struct aa_label *label,
 			audit_policy(label, op, ns_name, ent->new->base.hname,
 				     "same as current profile, skipping",
 				     error);
+			/* break refcount cycle with proxy. */
+			aa_put_proxy(ent->new->label.proxy);
+			ent->new->label.proxy = NULL;
 			goto skip;
 		}
 
-- 
2.18.0