apparmor: allow specifying an already created dir to create ns entries in
authorJohn Johansen <john.johansen@canonical.com>
Thu, 25 May 2017 13:31:46 +0000 (06:31 -0700)
committerJohn Johansen <john.johansen@canonical.com>
Thu, 8 Jun 2017 19:51:52 +0000 (12:51 -0700)
Signed-off-by: John Johansen <john.johansen@canonical.com>
Reviewed-by: Seth Arnold <seth.arnold@canonical.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
security/apparmor/apparmorfs.c
security/apparmor/include/apparmorfs.h
security/apparmor/policy_ns.c

index 35b822c..a18f14a 100644 (file)
@@ -1339,11 +1339,12 @@ static int __aafs_ns_mkdir_entries(struct aa_ns *ns, struct dentry *dir)
 /*
  * Requires: @ns->lock held
  */
-int __aafs_ns_mkdir(struct aa_ns *ns, struct dentry *parent, const char *name)
+int __aafs_ns_mkdir(struct aa_ns *ns, struct dentry *parent, const char *name,
+                   struct dentry *dent)
 {
        struct aa_ns *sub;
        struct aa_profile *child;
-       struct dentry *dent, *dir;
+       struct dentry *dir;
        int error;
 
        AA_BUG(!ns);
@@ -1373,7 +1374,7 @@ int __aafs_ns_mkdir(struct aa_ns *ns, struct dentry *parent, const char *name)
        /* subnamespaces */
        list_for_each_entry(sub, &ns->sub_ns, base.list) {
                mutex_lock(&sub->lock);
-               error = __aafs_ns_mkdir(sub, ns_subns_dir(ns), NULL);
+               error = __aafs_ns_mkdir(sub, ns_subns_dir(ns), NULL, NULL);
                mutex_unlock(&sub->lock);
                if (error)
                        goto fail2;
@@ -1929,7 +1930,7 @@ static int __init aa_create_aafs(void)
        ns_subremove(root_ns) = dent;
 
        mutex_lock(&root_ns->lock);
-       error = __aafs_ns_mkdir(root_ns, aa_sfs_entry.dentry, "policy");
+       error = __aafs_ns_mkdir(root_ns, aa_sfs_entry.dentry, "policy", NULL);
        mutex_unlock(&root_ns->lock);
 
        if (error)
index bcad877..071a59a 100644 (file)
@@ -112,8 +112,8 @@ void __aafs_profile_migrate_dents(struct aa_profile *old,
                                   struct aa_profile *new);
 int __aafs_profile_mkdir(struct aa_profile *profile, struct dentry *parent);
 void __aafs_ns_rmdir(struct aa_ns *ns);
-int __aafs_ns_mkdir(struct aa_ns *ns, struct dentry *parent,
-                    const char *name);
+int __aafs_ns_mkdir(struct aa_ns *ns, struct dentry *parent, const char *name,
+                    struct dentry *dent);
 
 struct aa_loaddata;
 void __aa_fs_remove_rawdata(struct aa_loaddata *rawdata);
index 0a8bc4e..7d7c237 100644 (file)
@@ -196,7 +196,7 @@ static struct aa_ns *__aa_create_ns(struct aa_ns *parent, const char *name,
        if (!ns)
                return NULL;
        mutex_lock(&ns->lock);
-       error = __aafs_ns_mkdir(ns, ns_subns_dir(parent), name);
+       error = __aafs_ns_mkdir(ns, ns_subns_dir(parent), name, dir);
        if (error) {
                AA_ERROR("Failed to create interface for ns %s\n",
                         ns->base.name);