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;
        }
 
        return profile;
+
+fail:
+       aa_free_profile(profile);
+
+       return NULL;
 }
 
 /**
 
                                goto fail;
                        }
                }
-       } else
+       } else {
                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;
+       }
        /* get file rules */
        error = unpack_pdb(e, &rules->file, false, true, &info);
        if (error) {
                   rules->policy.start[AA_CLASS_FILE]) {
                rules->file.dfa = aa_get_dfa(rules->policy.dfa);
                rules->file.start[AA_CLASS_FILE] = rules->policy.start[AA_CLASS_FILE];
-       } else
+               rules->file.perms = kcalloc(rules->policy.size,
+                                           sizeof(struct aa_perms),
+                                           GFP_KERNEL);
+               if (!rules->file.perms)
+                       goto fail;
+               memcpy(rules->file.perms, rules->policy.perms,
+                      rules->policy.size * sizeof(struct aa_perms));
+               rules->file.size = rules->policy.size;
+       } else {
                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;
+       }
        error = -EPROTO;
        if (aa_unpack_nameX(e, AA_STRUCT, "data")) {
                info = "out of memory";