printk: Flag register_console() if console is set on command line
authorTony Lindgren <tony@atomide.com>
Wed, 27 Mar 2024 10:59:37 +0000 (12:59 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 9 Apr 2024 13:30:13 +0000 (15:30 +0200)
If add_preferred_console() is not called early in setup_console(), we can
end up having register_console() call try_enable_default_console() before a
console device has called add_preferred_console().

Let's set console_set_on_cmdline flag in console_setup() to prevent this
from happening.

Signed-off-by: Tony Lindgren <tony@atomide.com>
Link: https://lore.kernel.org/r/20240327110021.59793-4-tony@atomide.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
kernel/printk/printk.c

index 67937e5c6010f5b6baea5e4aa76970d437232669..1e3b216825472e6f62d37a94f79ea65758c889ee 100644 (file)
@@ -2504,6 +2504,9 @@ static int __init console_setup(char *str)
        if (console_opt_save(str, brl_options))
                return 1;
 
+       /* Flag register_console() to not call try_enable_default_console() */
+       console_set_on_cmdline = 1;
+
        /* Don't attempt to parse a DEVNAME:0.0 style console */
        if (strchr(str, ':'))
                return 1;
@@ -3507,7 +3510,7 @@ void register_console(struct console *newcon)
         * Note that a console with tty binding will have CON_CONSDEV
         * flag set and will be first in the list.
         */
-       if (preferred_console < 0) {
+       if (preferred_console < 0 && !console_set_on_cmdline) {
                if (hlist_empty(&console_list) || !console_first()->device ||
                    console_first()->flags & CON_BOOT) {
                        try_enable_default_console(newcon);