]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
audit: fixup audit_init()
authorPaul Moore <paul@paul-moore.com>
Tue, 29 Nov 2016 21:53:23 +0000 (16:53 -0500)
committerPaul Moore <paul@paul-moore.com>
Wed, 14 Dec 2016 18:06:04 +0000 (13:06 -0500)
Make sure everything is initialized before we start the kauditd_thread
and don't emit the "initialized" record until everything is finished.
We also panic with a descriptive message if we can't start the
kauditd_thread.

Signed-off-by: Paul Moore <paul@paul-moore.com>
kernel/audit.c

index d4c78ba5c4f90bcc387cb416269ef51dfe9a7e13..b61642b1934f4d050450d87798c45d32193c2634 100644 (file)
@@ -1180,21 +1180,23 @@ static int __init audit_init(void)
                audit_default ? "enabled" : "disabled");
        register_pernet_subsys(&audit_net_ops);
 
-       kauditd_task = kthread_run(kauditd_thread, NULL, "kauditd");
-       if (IS_ERR(kauditd_task))
-               return PTR_ERR(kauditd_task);
-
        skb_queue_head_init(&audit_skb_queue);
        skb_queue_head_init(&audit_skb_hold_queue);
        audit_initialized = AUDIT_INITIALIZED;
        audit_enabled = audit_default;
        audit_ever_enabled |= !!audit_default;
 
-       audit_log(NULL, GFP_KERNEL, AUDIT_KERNEL, "initialized");
-
        for (i = 0; i < AUDIT_INODE_BUCKETS; i++)
                INIT_LIST_HEAD(&audit_inode_hash[i]);
 
+       kauditd_task = kthread_run(kauditd_thread, NULL, "kauditd");
+       if (IS_ERR(kauditd_task)) {
+               int err = PTR_ERR(kauditd_task);
+               panic("audit: failed to start the kauditd thread (%d)\n", err);
+       }
+
+       audit_log(NULL, GFP_KERNEL, AUDIT_KERNEL, "initialized");
+
        return 0;
 }
 __initcall(audit_init);