]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
audit: do not panic on invalid boot parameter
authorGreg Edwards <gedwards@ddn.com>
Mon, 5 Mar 2018 22:05:20 +0000 (15:05 -0700)
committerPaul Moore <paul@paul-moore.com>
Tue, 6 Mar 2018 18:50:07 +0000 (13:50 -0500)
If you pass in an invalid audit boot parameter value, e.g. "audit=off",
the kernel panics very early in boot before the regular console is
initialized.  Unless you have earlyprintk enabled, there is no
indication of what the problem is on the console.

Convert the panic() calls to pr_err(), and leave auditing enabled if an
invalid parameter value was passed in.

Modify the parameter to also accept "on" or "off" as valid values, and
update the documentation accordingly.

Signed-off-by: Greg Edwards <gedwards@ddn.com>
Signed-off-by: Paul Moore <paul@paul-moore.com>
Documentation/admin-guide/kernel-parameters.txt
kernel/audit.c

index 46b26bfee27ba81267703a1ceac7c0e082f1e5ec..93366b00bb6299995bbc776f20ae5aa768c48e63 100644 (file)
                        Use software keyboard repeat
 
        audit=          [KNL] Enable the audit sub-system
-                       Format: { "0" | "1" } (0 = disabled, 1 = enabled)
-                       0 - kernel audit is disabled and can not be enabled
-                           until the next reboot
+                       Format: { "0" | "1" | "off" | "on" }
+                       0 | off - kernel audit is disabled and can not be
+                           enabled until the next reboot
                        unset - kernel audit is initialized but disabled and
                            will be fully enabled by the userspace auditd.
-                       1 - kernel audit is initialized and partially enabled,
-                           storing at most audit_backlog_limit messages in
-                           RAM until it is fully enabled by the userspace
-                           auditd.
+                       1 | on - kernel audit is initialized and partially
+                           enabled, storing at most audit_backlog_limit
+                           messages in RAM until it is fully enabled by the
+                           userspace auditd.
                        Default: unset
 
        audit_backlog_limit= [KNL] Set the audit queue size limit.
index 1a3e75d9a66c4473ab94824d196c6520f9f1503f..69ef8de69f0378d49ed8ee4834ff18552f9a7fab 100644 (file)
@@ -1615,19 +1615,26 @@ static int __init audit_init(void)
 }
 postcore_initcall(audit_init);
 
-/* Process kernel command-line parameter at boot time.  audit=0 or audit=1. */
+/*
+ * Process kernel command-line parameter at boot time.
+ * audit={0|off} or audit={1|on}.
+ */
 static int __init audit_enable(char *str)
 {
-       long val;
-
-       if (kstrtol(str, 0, &val))
-               panic("audit: invalid 'audit' parameter value (%s)\n", str);
-       audit_default = (val ? AUDIT_ON : AUDIT_OFF);
+       if (!strcasecmp(str, "off") || !strcmp(str, "0"))
+               audit_default = AUDIT_OFF;
+       else if (!strcasecmp(str, "on") || !strcmp(str, "1"))
+               audit_default = AUDIT_ON;
+       else {
+               pr_err("audit: invalid 'audit' parameter value (%s)\n", str);
+               audit_default = AUDIT_ON;
+       }
 
        if (audit_default == AUDIT_OFF)
                audit_initialized = AUDIT_DISABLED;
        if (audit_set_enabled(audit_default))
-               panic("audit: error setting audit state (%d)\n", audit_default);
+               pr_err("audit: error setting audit state (%d)\n",
+                      audit_default);
 
        pr_info("%s\n", audit_default ?
                "enabled (after initialization)" : "disabled (until reboot)");