diff options
| author | 2023-08-21 15:37:24 -0300 | |
|---|---|---|
| committer | 2023-08-22 12:16:54 -0700 | |
| commit | 8884ba07786c718771cf7b78cb3024924b27ec2b (patch) | |
| tree | c967007ff19405c14482bd3829679aec8fa67a21 | |
| parent | apparmor: remove unused PROF_* macros (diff) | |
| download | linux-rng-8884ba07786c718771cf7b78cb3024924b27ec2b.tar.xz linux-rng-8884ba07786c718771cf7b78cb3024924b27ec2b.zip  | |
apparmor: fix invalid reference on profile->disconnected
profile->disconnected was storing an invalid reference to the
disconnected path. Fix it by duplicating the string using
aa_unpack_strdup and freeing accordingly.
Fixes: 72c8a768641d ("apparmor: allow profiles to provide info to disconnected paths")
Signed-off-by: Georgia Garcia <georgia.garcia@canonical.com>
Signed-off-by: John Johansen <john.johansen@canonical.com>
Diffstat (limited to '')
| -rw-r--r-- | security/apparmor/policy.c | 1 | ||||
| -rw-r--r-- | security/apparmor/policy_unpack.c | 5 | 
2 files changed, 4 insertions, 2 deletions
diff --git a/security/apparmor/policy.c b/security/apparmor/policy.c index 4817c1b30105..d7525f228c43 100644 --- a/security/apparmor/policy.c +++ b/security/apparmor/policy.c @@ -255,6 +255,7 @@ void aa_free_profile(struct aa_profile *profile)  	aa_put_ns(profile->ns);  	kfree_sensitive(profile->rename); +	kfree_sensitive(profile->disconnected);  	free_attachment(&profile->attach); diff --git a/security/apparmor/policy_unpack.c b/security/apparmor/policy_unpack.c index d2d740bb5618..8b2ad42c80ba 100644 --- a/security/apparmor/policy_unpack.c +++ b/security/apparmor/policy_unpack.c @@ -804,7 +804,7 @@ static struct aa_profile *unpack_profile(struct aa_ext *e, char **ns_name)  	const char *info = "failed to unpack profile";  	size_t ns_len;  	struct rhashtable_params params = { 0 }; -	char *key = NULL; +	char *key = NULL, *disconnected = NULL;  	struct aa_data *data;  	int error = -EPROTO;  	kernel_cap_t tmpcap; @@ -870,7 +870,8 @@ static struct aa_profile *unpack_profile(struct aa_ext *e, char **ns_name)  	}  	/* disconnected attachment string is optional */ -	(void) aa_unpack_str(e, &profile->disconnected, "disconnected"); +	(void) aa_unpack_strdup(e, &disconnected, "disconnected"); +	profile->disconnected = disconnected;  	/* per profile debug flags (complain, audit) */  	if (!aa_unpack_nameX(e, AA_STRUCT, "flags")) {  | 
