Merge tag 'apparmor-pr-2021-11-10' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-block.git] / security / apparmor / label.c
index 1c89b056337ba0407d668722a4a6ece573c7d36d..0b0265da19267a91dc19d23b898a244ccde89e8a 100644 (file)
@@ -309,7 +309,7 @@ out:
 }
 
 
-static void label_destroy(struct aa_label *label)
+void aa_label_destroy(struct aa_label *label)
 {
        AA_BUG(!label);
 
@@ -326,12 +326,13 @@ static void label_destroy(struct aa_label *label)
                }
        }
 
-       if (rcu_dereference_protected(label->proxy->label, true) == label)
-               rcu_assign_pointer(label->proxy->label, NULL);
-
+       if (label->proxy) {
+               if (rcu_dereference_protected(label->proxy->label, true) == label)
+                       rcu_assign_pointer(label->proxy->label, NULL);
+               aa_put_proxy(label->proxy);
+       }
        aa_free_secid(label->secid);
 
-       aa_put_proxy(label->proxy);
        label->proxy = (struct aa_proxy *) PROXY_POISON + 1;
 }
 
@@ -340,7 +341,7 @@ void aa_label_free(struct aa_label *label)
        if (!label)
                return;
 
-       label_destroy(label);
+       aa_label_destroy(label);
        kfree(label);
 }