apparmor: fix invalid reference on profile->disconnected
authorGeorgia Garcia <georgia.garcia@canonical.com>
Mon, 21 Aug 2023 18:37:24 +0000 (15:37 -0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Nov 2023 10:59:24 +0000 (11:59 +0100)
[ Upstream commit 8884ba07786c718771cf7b78cb3024924b27ec2b ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
security/apparmor/policy.c
security/apparmor/policy_unpack.c

index b38f7b2a5e1d5dde906a973a15b030e4aad1a894..ec695a6caac7d51b9bdfb3a532a3eaeb72eba9a5 100644 (file)
@@ -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);
 
index 8b8846073e142a85545b810c4a39f7a9940bb113..b49201306753cba5eff5f26ba5439eac2ebf4d00 100644 (file)
@@ -807,7 +807,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;
@@ -873,7 +873,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")) {