diff options
author | John Johansen <john.johansen@canonical.com> | 2023-04-15 00:50:32 -0700 |
---|---|---|
committer | John Johansen <john.johansen@canonical.com> | 2023-07-06 11:05:58 -0700 |
commit | ec6851ae0ab4587e610e260ddda75f92f3389f91 (patch) | |
tree | b25763d9b6a24b99eef27dcbdeef57471e9fa9bc /security/apparmor/policy.c | |
parent | 6f442d42c0d89876994a4a135eadf82b0e6ff6e4 (diff) | |
download | linux-ec6851ae0ab4587e610e260ddda75f92f3389f91.tar.gz linux-ec6851ae0ab4587e610e260ddda75f92f3389f91.tar.bz2 linux-ec6851ae0ab4587e610e260ddda75f92f3389f91.zip |
apparmor: fix: kzalloc perms tables for shared dfas
Currently the permstables of the shared dfas are not shared, and need
to be allocated and copied. In the future this should be addressed
with a larger rework on dfa and pdb ref counts and structure sharing.
BugLink: http://bugs.launchpad.net/bugs/2017903
Fixes: 217af7e2f4de ("apparmor: refactor profile rules and attachments")
Cc: stable@vger.kernel.org
Signed-off-by: John Johansen <john.johansen@canonical.com>
Reviewed-by: Jon Tourville <jontourville@me.com>
Diffstat (limited to 'security/apparmor/policy.c')
-rw-r--r-- | security/apparmor/policy.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/security/apparmor/policy.c b/security/apparmor/policy.c index a8fcc7291a75..b38f7b2a5e1d 100644 --- a/security/apparmor/policy.c +++ b/security/apparmor/policy.c @@ -589,7 +589,15 @@ struct aa_profile *aa_alloc_null(struct aa_profile *parent, const char *name, profile->label.flags |= FLAG_NULL; rules = list_first_entry(&profile->rules, typeof(*rules), list); rules->file.dfa = aa_get_dfa(nulldfa); + rules->file.perms = kcalloc(2, sizeof(struct aa_perms), GFP_KERNEL); + if (!rules->file.perms) + goto fail; + rules->file.size = 2; rules->policy.dfa = aa_get_dfa(nulldfa); + rules->policy.perms = kcalloc(2, sizeof(struct aa_perms), GFP_KERNEL); + if (!rules->policy.perms) + goto fail; + rules->policy.size = 2; if (parent) { profile->path_flags = parent->path_flags; @@ -600,6 +608,11 @@ struct aa_profile *aa_alloc_null(struct aa_profile *parent, const char *name, } return profile; + +fail: + aa_free_profile(profile); + + return NULL; } /** |